尝试...除了...其他v嵌套尝试...除外

Vai*_*pai 2 python

为什么python中的try语句需要else子句?

向前推进:

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()
Run Code Online (Sandbox Code Playgroud)

在我看来,else clause通过nested try...except避免需要可以避免仍然解决的角落案例else?:

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)
Run Code Online (Sandbox Code Playgroud)

Chr*_*gan 6

try..except..else可能不需要,但它可能很好.在这种情况下,try..except..else在我看来,表格明显更好.

仅仅因为你可以不使用语法元素,不会使它无用.装饰器语法纯粹是语法糖(我认为最明显的例子),for循环只是美化while循环,等等.有一个好地方try..except..else,我会说这是一个这样的地方.

此外,这两个代码块远不等同.如果f.read()引发异常(磁盘读取错误,文件内部的数据损坏或其他一些此类问题),第一个会引发异常,但第二个会丢失它并认为一切都有效.对于我自己,我更喜欢这些更多的东西,这些更短,更容易理解:

try:
    with open('foo', 'r') as f:
        data = f.read()
except IOError as e:
    error_log.write('Unable to open foo : %s\n' % e)
Run Code Online (Sandbox Code Playgroud)

(这假设你想要在file.read和中捕获错误file.close.我真的不明白为什么你不会.)