当前位置: 首页 > 面试题库 >

超出范围后,filehandle是否会在Python中自动关闭?

倪子晋
2023-03-14
问题内容

如果执行以下操作,文件句柄会在Python范围之外时自动关闭吗:

def read_contents(file_path):
  return file(file_path).read()

如果没有,如何编写此函数以自动关闭范围?


问题答案:

它应该关闭文件__del__语句中的文件句柄,但是更好的方法是使用with块:

def read_contents(file_path):
  with open(file_path, 'r') as f:
    return f.read()

有关更多信息,请参见http://docs.python.org/library/stdtypes.html#file.close。



 类似资料:
  • 问题内容: 我问这个问题是因为我正在创建很多执行程序服务,尽管我可能已经在某个地方进行内存泄漏了,需要进行调查,但是我认为对以下代码的最近更改实际上使它更糟,因此,我尝试确认到底是怎么回事: 然后,这会在(通常)N = 2个线程的另一个线程池上被调用,我不确定这是否相关。 问题是:一旦完成,是否超出范围 并 获取垃圾? 问题答案: ExecutorService服务是否超出范围并在完成后获得垃圾回

  • 问题内容: 为什么使用lambda函数来获取值列表i = 4。在调用lambda期间,不存在封闭范围。函数f已经完成工作并返回了控制(变量i不存在)。 问题答案: Python使用闭包捕获对原始变量的引用。这些对象保留对名称的引用,可以通过该引用访问值。这意味着变量在完成后将继续存在。 您可以在lambda对象的元组中内省此闭包;函数具有相同的属性: 这也是列表中 所有 lambda 都引用val

  • 我试图创建一个抽象层来模拟Oracle 11g中的DB2函数。目标是让当前运行DB2查询的客户重新指向Oracle抽象层,而无需更改其语法。 我在ABC模式下创建了以下函数: 当我试图在SQL语句中使用它时,会出现一个错误: 如果我显式地调用模式,它会工作: 我还有一个登录触发器,可以显式地将会话的当前_模式设置为ABC。我能看到的唯一复杂之处是,时间戳在Oracle中是一个关键字,但它允许我用这

  • 问题内容: 我在读取CSV文件时遇到此错误(无标题,3列,第二和第三字符串): 这是下面代码的一部分。坚持起来简直是愚蠢的简单事情,但是对于如何工作我只是空白。我是编码的新手,但是之前已经处理过csv模块,并且从来没有遇到过这方面的问题,只是在记事本中制作了一些测试csv文件,以查看是否可以从相同的代码中读取它,并且可以。我不知道。 问题答案: 尝试检查空白行。另外,请避免将其用作变量名。是打开的

  • 问题内容: 我有一个可选参数,它本身支持参数列表。 我的意思是,它应该支持: -f 1 2 -f 1 2 3 但不是: -f 1 -f 1 2 3 4 有没有办法在argparse中强制执行此操作?现在,我使用nargs =“ *”,然后检查列表长度。 编辑: 根据要求,我需要的是能够定义一个可接受数量的参数范围。我的意思是说(在示例中)2或3个args是正确的,但不是1或4或不在2..3范围内的

  • 问题内容: a=[‘123’,‘2’,4] b=a[4] or ‘sss’ print b 当列表索引超出范围时,我想获得一个默认值(此处:)。 我怎样才能做到这一点? 问题答案: 按照“要求宽恕,而不是允许”的Python精神,这是一种方法: