在python中,我们可以将那些在运行时可能会出现状况的代码放在
try
代码块中,在try
代码块的后面可以跟上一个或多个except
来捕获可能出现的异常状况。
-
FileNotFoundError
,文件找不到 -
LookupError
指定了未知的编码 -
UnicodeDecodeError
读取文件时无法按指定方式解码
def main():
f = None
try:
f = open('致橡树.txt', 'r', encoding='utf-8')
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
finally:
if f:
f.close()
if __name__ == '__main__':
main()
finally
块的代码不论程序正常还是异常都会执行到(甚至是调用了sys
模块的exit
函数退出Python环境,finally
块都会被执行,因为exit
函数实质上是引发了SystemExit
异常),因此我们通常把finally
块称为“总是执行代码块”,它最适合用来做释放外部资源的操作。
或者,
with
关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源
def main():
try:
with open('致橡树.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
if __name__ == '__main__':
main()