首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >try...except...else v嵌套try...except

try...except...else v嵌套try...except
EN

Stack Overflow用户
提问于 2011-07-09 13:26:08
回答 2查看 1.1K关注 0票数 2

Why is else clause needed for try statement in python ?

将其向前推进:

代码语言:javascript
复制
try:
  f = open('foo', 'r')
except IOError as e:
  error_log.write('Unable to open foo : %s\n' % e)
else:
  data = f.read()
  f.close()

我突然想到,else clause解决的角落问题仍然可以通过一个nested try...except来避免,而不需要else?:

代码语言:javascript
复制
try:
  f = open('foo', 'r')
  try:
    data = f.read()
    f.close()
  except:
    pass 
except IOError as e:
  error_log.write('Unable to open foo : %s\n' % e)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-09 13:50:49

装饰器语法纯粹是语法糖(我认为最明显的例子),for循环只是美化了的装饰器循环,等等。

此外,这两个代码块远远不是等价的。如果f.read()引发异常(磁盘读取错误、文件中的数据损坏或其他类似问题),第一个将引发它应该引发的异常,但第二个将丢失异常,并认为一切都正常。对于我自己来说,我更喜欢这样的东西,它更简短,更容易理解:

代码语言:javascript
复制
try:
    with open('foo', 'r') as f:
        data = f.read()
except IOError as e:
    error_log.write('Unable to open foo : %s\n' % e)

(这里假设您想要捕获file.readfile.close中的错误。我真的不明白你为什么不这样做。)

票数 6
EN

Stack Overflow用户

发布于 2011-07-09 13:30:04

实际上,并不总是需要的,你可以简单地这样做:

代码语言:javascript
复制
f = None
try:
  f = open('foo', 'r')
except IOError:
  error_log.write('Unable to open foo\n')
if f:
   data = f.read()
   f.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6632954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档