Python标准模块中是否有类似的函数?

2024-03-29 11:13:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个标准函数(操作符、装饰器),它将等效于以下手写函数:

def defaulted(func, defaultVal):
   try:
      result = func()
   except: 
      result = defaultVal

   return result

谢谢!你知道吗


Tags: 函数标准returndef装饰resultfunctry
2条回答

不,Python的哲学是显式比隐式好。大多数希望定期抛出异常的Python函数,如dict.\uu getitem,都提供了返回默认值的等价版本,如听写. 你知道吗

我以前使用过new with context来表示类似的内容;代码如下所示:

with ignoring(IOError, OSError):
    # some non-critical file operations

但我也不需要归还任何东西。一般来说,整个函数级别都不适合这样做,如果您想在其他地方更优雅地处理错误,那么通过使用decorators,您将阻止任何实际获得错误的机会。你知道吗

而且,except:是非常危险的;您可能是指(至少)except Exception:,可能是指范围更广的东西,比如IOError或KeyError。否则,还将捕获诸如Ctrl-C、SystemExit和拼写错误的变量名之类的内容。你知道吗

据我所知,stdlib中没有这样的东西。首先,这是一个坏习惯:你应该永远不要使用一个空的except。(相反,请指定要捕获的异常;这样,就不会捕获所有异常!)你知道吗

这里有个装饰师:

>>> def defaultval(error, value):
...     def decorator(func):
...             def defaulted(*args, **kwargs):
...                     try:
...                             return func(*args, **kwargs)
...                     except error:
...                             return value
...             return defaulted
...     return decorator
...
>>> @defaultval(NameError, "undefined")
... def get_var():
...     return name
...
>>> get_var()
'undefined'

相关问题 更多 >