Python try... finally变量引用问题

示例代码

try:
    f = open('D:/_jobs/test1.txt', 'r')
    print(f.read())
finally:
    if f:
        f.close()

报错信息如下:

Traceback (most recent call last):
  File "io/open.py", line 2, in <module>
    f = open('D:/_jobs/test1.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'D:/_jobs/test1.txt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "io/open.py", line 5, in <module>
    if f:
NameError: name 'f' is not defined

这里f为什么未定义

阅读 5.1k
2 个回答

嗯,正确的写法是

with open('D:/_jobs/test1.txt', 'r') as f:
    print(f.read())

finally的作用是不管有没有错误都要执行的,有错误也要执行的,执行open()操作发送了错误,这个语句并没有被执行完,所以f并没有被定义,但是finally中的操作还是要继续的,自然找不到f。

这是新手一开始就学习解释性语言容易犯的错误

import random
if random.random() < 0.2:
    x=0.1
elif random.random() < 0.4:
    x=0.3
print(x)

你可以运行上面的代码想想看。

先声明变量是编程时候的好习惯。

你这报的错是找不到D:/_jobs/test1.txt这个文件,和f未定义没关系

No such file or directory: 'D:/_jobs/test1.txt'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题