【问题标题】:What is the Pythonic way to use a default value when function returns None or throws exception?当函数返回 None 或抛出异常时,使用默认值的 Pythonic 方法是什么?
【发布时间】:2017-05-06 15:36:52
【问题描述】:

有什么更 Pythonic 的方式来做到这一点?

try:
    a = foo() or b
except AttributeError:
    a = b

我想将a 设置为函数foo 的返回值,但是如果foo 返回None 或引发AttributeError 异常,那么我希望将a 设置为@ 987654328@。

【问题讨论】:

  • 这已经足够“Pythonic”了。
  • 如果foo返回0怎么办?
  • 如果你经常这样做,你也许可以在 foo 上使用装饰器。

标签: python exception-handling default-value nonetype


【解决方案1】:

正如 Gennady Kandaurov 所指出的:您需要测试 foo() 的“有效”返回值,这些值不是“真实的”(如 0、[]、(),...) :

try:
    a = foo() if foo() is not None else b
except AttributeError:
    a = b

根据foo 的实现细节(无论是昂贵还是有副作用),您可能只想调用一次:

try:
    f = foo()
    a = f if f is not None else b
except AttributeError:
    a = b

【讨论】:

  • 这会调用函数foo 两次,这可能会也可能不会。
  • 如果foo 的通话费用很高怎么办?
  • 是的,我也是。
  • @PeterWood 或有副作用!!
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多