在出现异常时正确地管理各种系统资源(如文件,锁和链接)通常是一个棘手的问题。
例如,引发的异常可能导致控制流跳过释放关键资源(如锁)的语句。
with 语句支持在由上下文管理器对象控制的运行时上下文中执行一系列语句
例如:
with open("debuglog","a") as f:
f.write("Debugging \n")
statements
f.write("Done \n")
# 当控制流离开with语句后面的代码块时,with语句将自动关闭已打开的文件。
import threading
lock = threading.Lock()
with lock:
# 关键部分
statements
# 关键部分结束
#当控制流进入with语句后面的代码块时自动请求一个锁,而在控制流离开时有自动释放这个锁
断言 assert语句
assert语句可以在程序中引入调试代码。
assert的一般格式为:assert test [, msg]
其中test是一个表达式,其值应该为True或False。如果test求值为False,assert就会引发AssertionError异常并使用在assert中提供的可选信息msg,例如:
def write_data(file,data):
assert file, "write_data : file not defind !"
···