在Python中使用try-except-else怎么样?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (85)

在Python中,我经常看到这个块:

try:
   try_this(whatever)
except SomeException as exception:
   #Handle exception
else:
   return something

try-except-else to exist的原因是什么?

我不喜欢这种编程,因为它使用异常来执行流控制。但是,如果它包含在语言中,肯定有一个很好的理由,不是吗?

我的理解是,例外不是错误,并且它们只应用于特殊情况(例如,我试图将文件写入磁盘,而没有更多的空间,或者可能没有权限),而不是用于流控制。

通常,我将例外情况处理为:

something = some_default_value
try:
    something = try_this(whatever)
except SomeException as exception:
    #Handle exception
finally:
    return something

或者,如果发生异常时,我真的不想返回任何内容,那么:

try:
    something = try_this(whatever)
    return something
except SomeException as exception:
    #Handle exception
提问于
用户回答回答于

每当你看到这个:

try:
    y = 1 / x
except ZeroDivisionError:
    pass
else:
    return y

甚至这个:

try:
    return 1 / x
except ZeroDivisionError:
    return None

考虑一下这一点:

import contextlib
with contextlib.suppress(ZeroDivisionError):
    return 1 / x
用户回答回答于

你应该小心使用Final模块,因为它与在try中使用其他模块不一样:

In [10]: dict_ = {"a": 1}

In [11]: try:
   ....:     dict_["b"]
   ....: except KeyError:
   ....:     pass
   ....: finally:
   ....:     print "something"
   ....:     
something

使用ell模块会使你的代码更具可读性,并且只有在未引发异常时才会运行:

In [14]: try:
             dict_["b"]
         except KeyError:
             pass
         else:
             print "something"
   ....:

扫码关注云+社区

领取腾讯云代金券