一、说明
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]