Why is else clause needed for try statement in python ?
向前推进:
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
来避免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)
的需要吗? :
{{1}}
答案 0 :(得分: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)
(这假设你想要捕捉file.read
和file.close
中的错误。我真的不明白你为什么不这样做。)
答案 1 :(得分:0)
实际上,并不总是需要你可以做到:
f = None
try:
f = open('foo', 'r')
except IOError:
error_log.write('Unable to open foo\n')
if f:
data = f.read()
f.close()