2017-10-08 72 views
-2

文件'mig.txt'在我的当前工作目录中不存在。所以下面的代码应该会遇到一个IOError异常,并且由于'mig.txt'从来没有被创建过,所以它也会引发一个'NameError',表示'bat'没有被定义。但是,即使该文件从未创建,finally块如何正常工作?它是否与Python版本(3.6.0)有关?Python中的例外

try: 
    bat=open('mig.txt') 
    print(bat.readline(),end='') 
except IOError: 
    print('File error') 
finally: 
    bat.close() 

输出:

File error 
+1

你是什么意思?在尝试访问其属性之前,请仔细检查该名称是否存在。为什么你会期望名称错误? – jonrsharpe

+0

道歉。我只需通过删除当地人中'if'bat'来编辑finally块:'。我仍然得到相同的输出。 –

+0

我期望名称错误,因为文件mig.txt从来没有创建过,因此,它不可能调用close()方法吗? –

回答

0

在您发布的代码,你会得到一个NameError,以及作为输出File error当你在Python 3.6中运行它。发生这种情况的原因是finally块总是执行,无论try/catch块发生了什么(除非您退出该程序)。