Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在没有“当前正在处理”异常的情况下打印异常对象的stacktrace?_Python_Exception - Fatal编程技术网

Python:如何在没有“当前正在处理”异常的情况下打印异常对象的stacktrace?

Python:如何在没有“当前正在处理”异常的情况下打印异常对象的stacktrace?,python,exception,Python,Exception,如何打印异常对象的堆栈跟踪,例如concurrent.futures.Future.exception的返回值?大多数回溯和sys异常函数依赖于当前正在处理的隐式异常,包括sys.exc_info、traceback.print_exc、traceback.format_exc。异常已被处理,并作为对象返回,因此对我来说毫无价值。有两个回溯函数接受一个异常参数,但它们要么不提供堆栈跟踪输出,要么需要一个回溯对象作为输入,而我没有。我当然可以创建一个回溯对象,但该对象不会包含我需要的信息 是的,我

如何打印异常对象的堆栈跟踪,例如concurrent.futures.Future.exception的返回值?大多数回溯和sys异常函数依赖于当前正在处理的隐式异常,包括sys.exc_info、traceback.print_exc、traceback.format_exc。异常已被处理,并作为对象返回,因此对我来说毫无价值。有两个回溯函数接受一个异常参数,但它们要么不提供堆栈跟踪输出,要么需要一个回溯对象作为输入,而我没有。我当然可以创建一个回溯对象,但该对象不会包含我需要的信息

是的,我知道这里有很多关于打印异常的stacktrace的问题。我已经找遍了。这个问题与那些问题完全不同

这是我试图做的一个例子

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
    for idx in range(0, 10):
        future = executor.submit(third_party_script.main)
        threads.append(future)

for future in threads:
    if(future.exception()):
        print(magic_traceback_function(future.exception()))

如何打印异常对象的堆栈跟踪,例如concurrent.Future.exception的返回值?

您可以通过调用Future.result获得要引发的异常。据我所知,它也应该包含原始的回溯。因此,您可以通过将future.result放入try块并打印回溯来捕获异常。还有一个uuu traceback uuu属性可能对您有所帮助。

有一个方法返回调用引发的异常。因此,您可以像从任何其他Python 3.5+异常中一样从它获得回溯。只需将ex替换为您的例外:

print.jointraceback.TracebackException.from\u exceptionex.format 一个扩展示例和其他实现此功能的功能:

导入回溯 尝试: 1/0 例外情况除外,例如: print.jointraceback.TracebackException.from_exceptionex.format==traceback.format_exc==jointraceback.format_ExceptionTypex,ex,ex.\__ print.jointraceback.TracebackException.from\u exceptionex.format 输出类似于:

符合事实的 回溯最近一次呼叫上次: 文件untidsfsdfsled.py,第29行,在 1/0 ZeroDivision错误:被零除
我一直在努力解决这个问题,直到我发现使用@logger.catch注释可以查看异常日志/stacktrace,而且实际上可以以丰富多彩的方式!,像这样:

@渔获量 def其他_脚本: ... 以concurrent.futures.ThreadPoolExecutor作为执行者: 对于0、10范围内的idx: executor.Submither_脚本
但是,如果不能对第三方脚本进行注释,则可能没有帮助。无论如何,这对我有帮助

我的理解是,您可以通过调用future.result来引发异常。据我所知,它也应该包含原始的回溯。因此,您可以通过将future.result放入try块并打印回溯来捕获异常。让我知道这是否有效。还有一个uuu traceback uuuu属性可能对您有所帮助。是的,您是正确的。非常感谢。事实证明,从未来获取异常最有用的方法是使用future.result,而不是future.exception。我确实阅读了Future.result的文档,但是如果调用引发,那么这个方法将引发的尴尬措辞对我来说没有意义@sytech,你应该把你的评论作为回答,这样我就可以接受了。