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

时间:2011-07-09 05:26:08

标签: python

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}}

2 个答案:

答案 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.readfile.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()