2024-03-29 11:13:18 发布
网友
我正在寻找一个标准函数(操作符、装饰器),它将等效于以下手写函数:
def defaulted(func, defaultVal): try: result = func() except: result = defaultVal return result
谢谢!你知道吗
不,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和拼写错误的变量名之类的内容。你知道吗
except:
except Exception:
据我所知,stdlib中没有这样的东西。首先,这是一个坏习惯:你应该永远不要使用一个空的except。(相反,请指定要捕获的异常;这样,就不会捕获所有异常!)你知道吗
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'
不,Python的哲学是显式比隐式好。大多数希望定期抛出异常的Python函数,如dict.\uu getitem,都提供了返回默认值的等价版本,如听写. 你知道吗
我以前使用过new with context来表示类似的内容;代码如下所示:
但我也不需要归还任何东西。一般来说,整个函数级别都不适合这样做,如果您想在其他地方更优雅地处理错误,那么通过使用decorators,您将阻止任何实际获得错误的机会。你知道吗
而且,
except:
是非常危险的;您可能是指(至少)except Exception:
,可能是指范围更广的东西,比如IOError或KeyError。否则,还将捕获诸如Ctrl-C、SystemExit和拼写错误的变量名之类的内容。你知道吗据我所知,stdlib中没有这样的东西。首先,这是一个坏习惯:你应该永远不要使用一个空的
except
。(相反,请指定要捕获的异常;这样,就不会捕获所有异常!)你知道吗这里有个装饰师:
相关问题 更多 >
编程相关推荐