试一试…除了…try..except



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

向前推进:

try:
  f = open('foo', 'r')
except IOError as e:
  error_log.write('Unable to open foo : %sn' % 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 : %sn' % e)

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 : %sn' % e)

(这假设您想捕获file.readfile.close中的错误。我真不明白你为什么不愿意。

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

f = None
try:
  f = open('foo', 'r')
except IOError:
  error_log.write('Unable to open foon')
if f:
   data = f.read()
   f.close()

最新更新