python3如何找出apply_async目标函数中的哪一行在应用error_callback时导致错误

use*_*259 4 python multiprocessing python-3.x python-multiprocessing

使用Python 3.4

我有一个失败的目标函数,并且 apply_async 调用我的错误回调函数而不是我的回调函数。

问题是捕获并发送到 error_callback 的异常没有帮助,我无法弄清楚目标函数中发生错误的位置。

我的错误回调

  def error_callback(self,e):
    print('error_callback()',e)
    # tested one of these at a time
    traceback.print_exc()
    traceback.print_last()
    traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)

和回溯输出

打印_执行

  File "/usr/lib/python3.4/traceback.py", line 125, in _iter_chain
    context = exc.__context__
  AttributeError: 'NoneType' object has no attribute '__context__'
Run Code Online (Sandbox Code Playgroud)

最后打印

  File "/usr/lib/python3.4/traceback.py", line 262, in print_last
    raise ValueError("no last exception")
  ValueError: no last exception
Run Code Online (Sandbox Code Playgroud)

打印堆栈

  File "./relative/path/to/my/script.py", line 71, in traceback
    traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)

我不得不承认,我对回溯库以及如何使用它不太满意,但在我看来,在这种情况下不可能使用回溯?

我应该怎么办?

Blc*_*ght 7

您调用的函数traceback都希望从 获取异常信息sys.exec_info,这是在捕获异常时通常存储异常信息的地方。但是,由于您的情况中的实际异常来自子进程,因此当您在父进程中调用它们时,它们不会找到任何异常信息。

您需要e从子进程收到的 Exception 对象中提取相关信息。尝试使用traceback.print_exception适当的参数:

traceback.print_exception(type(e), e, e.__traceback__)
Run Code Online (Sandbox Code Playgroud)