目前,我非常依赖traceback来检查python错误(在我的控制台上)。但是,当错误发生在与主要线程不同的线程中时,控制台上不会输出回溯:
def test(n):
time.sleep(10-n)
print(n)
assert False
#assert False #if uncommented the console correctly show the traceback
with futures.ThreadPoolExecutor(4) as executor:
res=executor.map(test,range(10))
print("DONE finally")
如果我取消注释"断言错误"返回的回溯是以下一个:
追踪(最近一次呼叫最后一次):
File" C:/Users/massimo.bono/Documents/PythonWorkspace/AntaresPythonUtils/AntaresUtils/thread_try.py" ;,第14行,
断言错误
的AssertionError
如果留下评论,控制台的输出如下:
3
2
1
0
4
6
5
7
9
8
DONE finally
Process finished with exit code 0
其他有助于我的信息:
我尝试通过输入python控制台从windows powershell运行相同的python文件,但没有显示回溯。
答案 0 :(得分:0)
根据我的理解,似乎线程的回溯仍然存在于python运行时中:它们不是简单地打印在stderr上。
您可以通过捕获执行程序调用的方法中的任何异常来解决问题,如下所示:
#this will be executed in a different thread. If any exception is caught
#it will be printed on the console
def thread_safe(n):
try:
test(n)
except Exception as e:
traceback.print_exc()
with futures.ThreadPoolExecutor(4) as executor:
res=executor.map(thread_safe,range(10))
print("DONE finally")