Python打开和关闭文件-不直观
是我还是用python打开或关闭一个文件使用了不同的方法,使得它真的不直观? 有更好的方法吗 例如:Python打开和关闭文件-不直观,python,python-2.7,Python,Python 2.7,是我还是用python打开或关闭一个文件使用了不同的方法,使得它真的不直观? 有更好的方法吗 例如: f = open('file.txt', 'r') try: # do stuff with f finally: f.close() 现在,为什么我使用内置的“函数”打开,但要关闭文件,我没有函数“关闭”,但我必须调用“对象”方法“关闭” 这与此相同: with open('file.txt', 'r') as f: # do stuff 这是同样的: with open('
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
现在,为什么我使用内置的“函数”打开,但要关闭文件,我没有函数“关闭”,但我必须调用“对象”方法“关闭” 这与此相同:
with open('file.txt', 'r') as f:
# do stuff
这是同样的:
with open('file.txt', 'r') as f:
# do stuff
使用关键字使其更加直观。当您退出时,它将自动关闭该文件。从文档中:
“with”语句澄清了以前使用try…finally块来确保执行清理代码的代码
执行此语句后,f中的file对象将自动关闭,即使for循环在块的一部分引发异常
例如:
with open('file.txt', 'r') as f:
# do stuff with f
# Do some other stuff - we dropped down a level of indentation, so the file is closed
更具体地说,它将首先调用上下文的方法-这会打开初始文件。使用as
语句设置\uuuuuu enter\uuuu
返回的内容-在这种情况下,文件返回self
,并将其设置为f
。当with
块完成时,它将调用上下文的方法。对于文件上下文,这将执行关闭文件的正常最终
块处理
请注意,with
块不会为您处理异常,它只会确保调用\uuuuuuuuuuuuuu
(这将优雅地关闭文件),即使它们确实发生了。因此,如果您在处理文件时遇到ValueError
,您仍然需要在with
块中使用try…catch
块来处理可能对您的计算/脚本等造成的任何影响
正如Marcin所指出的,大多数语言都是在一个
try…catch…finally
块中实现的。例如,Java可以做到这一点:
BufferedReader读取器=null;
试一试{
reader=new BufferedReader(新文件(“File.txt”);
//读入数据并做一些事情
}捕获(例外e){
//不应该是一般的,但你明白了
e、 printStackTrace();
}最后{
//总是执行
if(reader!=null)reader.close();
}
使用关键字使其更加直观。当您退出时,它将自动关闭该文件。从文档中:
“with”语句澄清了以前使用try…finally块来确保执行清理代码的代码
执行此语句后,f中的file对象将自动关闭,即使for循环在块的一部分引发异常
例如:
with open('file.txt', 'r') as f:
# do stuff with f
# Do some other stuff - we dropped down a level of indentation, so the file is closed
更具体地说,它将首先调用上下文的方法-这会打开初始文件。使用as
语句设置\uuuuuu enter\uuuu
返回的内容-在这种情况下,文件返回self
,并将其设置为f
。当with
块完成时,它将调用上下文的方法。对于文件上下文,这将执行关闭文件的正常最终
块处理
请注意,with
块不会为您处理异常,它只会确保调用\uuuuuuuuuuuuuu
(这将优雅地关闭文件),即使它们确实发生了。因此,如果您在处理文件时遇到ValueError
,您仍然需要在with
块中使用try…catch
块来处理可能对您的计算/脚本等造成的任何影响
正如Marcin所指出的,大多数语言都是在一个
try…catch…finally
块中实现的。例如,Java可以做到这一点:
BufferedReader读取器=null;
试一试{
reader=new BufferedReader(新文件(“File.txt”);
//读入数据并做一些事情
}捕获(例外e){
//不应该是一般的,但你明白了
e、 printStackTrace();
}最后{
//总是执行
if(reader!=null)reader.close();
}
我想补充一点,在大多数其他有异常处理的语言中,try/catch方式是常见的。@Marcin类似于现在末尾的位吗?我想补充一点,try/catch方式在大多数有异常处理的语言中是常见的。@Marcin类似于现在末尾的位吗?把open
想象成一个构造函数(在Python2.x中,它是文件
类型的近义词。)将打开
视为构造函数(在Python2.x中,它是文件
类型的近义词)。