如何处理with块内的异常

时间:2017-11-14 18:20:18

标签: python python-3.x python-2.7

所以我正在阅读如何在python中正确使用with关键字,我无法找出处理with语句中可能发生的异常的最佳方法。所以我正在写一个非常简单的脚本来为文件写一个值。

json = loads(response.read())
try:
  with open(args.file, 'w') as t:
    try:
      t.write(json[TOKEN])
      print "Wrote token to {file!s}".format(file=args.file)
    except KeyError:
      print "Unable to find {token!s} in response".format(token=TOKEN)
except IOError as bad:
  print "Ran into an error while trying to open file {file!s}".format(file=args.file)
  print "{err!s}".format(bad.message)

我想确定如果发现KeyError文件仍然会正常关闭。

1 个答案:

答案 0 :(得分:0)

我在以下文档https://www.python.org/dev/peps/pep-0343/中找到了答案,该文件位于评论中提供的链接中。

根据此处的链接,使用with关键字时会发生什么。要使用with关键字,您的表达式必须包含__enter__(self)__exit__(self, type, value, traceback)方法。 Python将尝试调用__enter__()方法,然后调用您的代码块,然后使用__exit(self, type, value, traceback)方法运行finally。这将确保所有设置和拆除都得到相应的完成。至少这是我对关键字的理解。