与open一起使用时不应使用Python try

与open一起使用时不应使用Python try,python,Python,最近我一直在练习杰森·坎农在奥莱利的《莱辛》: 在“文件,第二部分”部分的6:55,我在按照视频中的想法练习错误捕捉时遇到了问题。我的代码: with open('data.txt') as file: try: file_content = file.read() except: file_content = '' print(len(file_content)) 其思想是在找不到文件时捕获错误,try块运行,而except块不运行。我希望文件

最近我一直在练习杰森·坎农在奥莱利的《莱辛》:

在“文件,第二部分”部分的6:55,我在按照视频中的想法练习错误捕捉时遇到了问题。我的代码:

with open('data.txt') as file:
    try:
        file_content = file.read()
    except:
        file_content = ''
print(len(file_content))

其思想是在找不到文件时捕获错误,try块运行,而except块不运行。我希望文件内容的长度为0,而不是出现错误。请告诉我哪里做错了。非常感谢

如果找不到该文件,则引发错误的是
打开的
,而不是试图读取该文件

try:
    with open('data.txt') as file:
        file_content = file.read()
except (FileNotFoundError, IOError):
    file_content = ''

请注意,如果
open
引发
FileNotFound
错误,则实际上不会创建上下文管理器,因此,在控制传递给异常处理程序之前,
with
语句不需要尝试执行
\uuuuuuuuuuuuuuuu
方法。

输出是什么?错误在代码的第一行,try语句之前生成。您可能想把它移到内部,并考虑如何处理它。它是否给出引发异常的行号?(它是在您的
try
块内还是…更早?)这里的重要信息是,它还应该包括一个行号,我猜这会将您指向
open()
作为错误源,而不是
read()
(这反过来会告诉你,你的程序从未到达它的
try
块!)@Samwise:很抱歉,我没有得到你提到的“行号”,但现在我得到了!是的,行号是1,谢谢你指出它,以便我能清楚地理解它!