• python使用进程池多进程时,如何打印错误信息


    一、说明

    1、python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息。

    2、如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了。

    二、具体方法如下:

    法一:

    注:此方法不会打印错误代码具体位置

    a = [1, 2, 3]
    try:
        b = a[5]
    except Exception as ee:
        print(ee)
        s = ee  # 如果想在except语句外使用ee,需要用变量储存
    # 输出ee:
    # list index out of range
    
    # s: IndexError('list index out of range') ,s本身是包含错误类型的,所以,如果需要将错误信息写入文件的话,需要通过str(s)将信息转换为字符串(或者使用pickle.dumps(s),但不能使用json.dumps,会报错)
    print(type(s))
    # 输出:
    # IndexError
    
    print(s)
    # 输出:
    # list index out of range 

    法二:

    注:此方法可以输出错误代码位置

    import sys
    import traceback
    
    a = [1, 2, 3]
    try:
        b = a[5]
    except:
        error_type, error_value, error_trace = sys.exc_info()  # 输出的值是元组,分别是:错误类型,错误内容,traceback对象
    
    print(error_type)  # 与法一中的type(s)一样
    # 输出:
    # IndexError
    
    print(error_value)  # 与法一中的s一样,IndexError('list index out of range')
    # 输出:
    # IndexError('list index out of range')
    
    
    # 对于error_trace对象,需要通过trackback模块来提取具体内容
    # 法1(此方法只显示错误代码的行数):
    for info in traceback.extract_tb(error_trace):  
        print(info)
    # 输出:
    # <FrameSummary file <ipython-input-85-e62dacac329b>, line 6 in <module>>
    
    
    # 法2(此方法会显示错误代码的内容):
    with open('error.txt', 'a') as f:
        traceback.print_tb(error_trace)
        traceback.print_tb(error_trace, file=f)  # 将输出信息存入文件
    # 输出:
    # File "<ipython-input-85-e62dacac329b>", line 6, in <module>
    # b = a[5]
  • 相关阅读:
    Java中的多线程
    Service组件
    Notification和Notification Manager的使用
    Java网络编程
    Intent组件
    Android 多任务多线程断点下载
    hdu 2045
    hdu 2492
    poj 2785
    湖南省第六届程序设计大赛D(台球碰撞)
  • 原文地址:https://www.cnblogs.com/jaysonteng/p/12156609.html
Copyright © 2020-2023  润新知