根据the official python documentation,“finally”语句将始终执行,因此通常用于清理操作。
如果存在“finally”,则指定“清理”处理程序。执行“try”子句,包括任何“except”和“else”子句。如果任何子句中发生异常但未处理,则会临时保存该异常。执行“finally”子句。如果存在已保存的异常,则会在“finally”子句的末尾重新引发异常。如果“finally”子句引发另一个异常或执行return或break语句,则丢弃保存的异常:
但是,当我在一个线程中实现“try-finally”语句时,“finally”部分似乎没有被执行。
from __future__ import print_function
import threading
def thread1():
try:
while True:
pass
except:
print("exception")
finally:
print("closed")
t = threading.Thread(target = thread1)
t.setDaemon(True)
t.start()
while True:
pass
当被ctrl-c中断时,屏幕上不会打印“关闭”。那是为什么?
虽然在下面的代码中“finally”确实有效(毫不奇怪)
from __future__ import print_function
try:
while True:
pass
finally:
print("closed")
答案 0 :(得分:2)
thread
模块的the documentation(threading
)的基础:
当主线程退出时,系统定义其他线程是否存活。在使用本机线程实现的SGI IRIX上,它们存活下来。在大多数其他系统上,它们在不执行
try ... finally
子句或执行对象析构函数的情况下被终止。
答案 1 :(得分:-1)
CTRL + C会杀死脚本,即它会停止运行,其他任何内容都不会处理。