对于系统资源如件、数据库连接、socket ,应程序打开这些资源并执完业务逻辑之后,必须做的
件事就是要关闭(断开)该资源。
如 Python 程序打开个件,往件中写内容,写完之后,就要关闭该件,否则会出现么情况呢?
极端情况下会出现 "Too many open files" 的错误,因为系统允许你打开的最件数是有限的。
同样,对于数据库,如果连接数过多没有及时关闭的话,就可能会出现 "Can not connect to MySQL
server Too many connections",因为数据库连接是种常昂贵的资源,可能限制的被创建。
来看看如何正确关闭个件。
普通版:
def m1():
f = open("output.txt", "w")
f.write("python之禅")
f.close()
这样写有个潜在的问题,如果在调 write 的过程中,出现异常进导致后续代码法继续执,close
法法被正常调,因此资源就会直被该程序占者释放。那么该如何改进代码呢?
进阶版:
def m2():
f = open("output.txt", "w")
try:
f.write("python之禅")
except IOError:
print("oops error")
finally:
f.close()
改良版本的程序是对可能发异常的代码处进 try 捕获,使 try/finally 语,该语表示如果在 try 代码
块中程序出现异常,后续代码就再执,直接跳转到 except 代码块。论如何,finally 块的代码最
终都会被执。因此,只要把 close 放在 finally 代码中,件就定会关闭。
级版:
def m3():
with open("output.txt", "r") as f:
f.write("Python之禅")
千锋Python人工智能学院
评论0