与open一起使用时,Python尝试除非预期之外
最近我一直在 O'reilly 上练习 Jason Cannon 的课程:https ://learning.oreilly.com/videos/python-for-beginners/9781789617122/9781789617122-video10_3/
在“文件,第二部分”部分的 6:55,我在按照视频中的想法练习错误捕获时遇到了问题。我的代码:
with open('data.txt') as file:
try:
file_content = file.read()
except:
file_content = ''
print(len(file_content))
这个想法是在找不到文件时捕获错误,try块运行但except块不运行。我预计 file_content 的长度为 0 而不是出现错误。请告诉我我哪里做错了。非常感谢
回答
如果未找到该文件,则会open引发错误,而不是尝试从中读取。
try:
with open('data.txt') as file:
file_content = file.read()
except (FileNotFoundError, IOError):
file_content = ''
请注意,如果open引发FileNotFound错误,则实际上不会创建上下文管理器,因此在控制传递给异常处理程序之前,with语句不需要尝试执行__exit__方法。