向前推进:
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)
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.我真的不明白为什么你不会.)