Python不会从守护程序线程中引发的异常中打印回溯消息.
例如,此代码创建一个守护线程并在新线程中引发异常:
def error_raiser():
raise Exception
import threading
thread = threading.Thread(target=error_raiser)
thread.daemon = True
thread.start()
Run Code Online (Sandbox Code Playgroud)
但不打印追溯.(它没有输出).
但是,如果线程未设置为守护程序线程,Python将打印回溯.以下是一行注释掉的相同代码:
def error_raiser():
raise Exception
import threading
thread = threading.Thread(target=error_raiser)
# thread.daemon = True
thread.start()
Run Code Online (Sandbox Code Playgroud)
和输出:
Exception in Thread-1:
Traceback (most recent call last):
File "C:\Python26\lib\threading.py", line 525, in __bootstrap_inner
self.run()
File "C:\Python26\lib\threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "test.py", line 2, in error_raiser
raise Exception
Exception
Run Code Online (Sandbox Code Playgroud)
在Python 2.6.2和Python 3.0.1中执行此代码并给出相同的结果.但有趣的是,如果我通过在IPython shell中导入代码来执行代码,则会显示该线程是否为守护进程的异常.
根据文档,"守护进程"标志的唯一意义是"当只剩下守护进程线程时,整个Python程序退出." 这会让我相信不会在异常后打印回溯是Python中的错误,除非我遗漏了文档中的内容.
这是一个错误,还是我错过了文档中的某些内容,这种行为是故意的?如果是故意的,我如何强制Python在守护程序线程中打印回溯而不使用IPython?
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |