我发现自己一遍又一遍地有这样的模式:
variable = ""
try:
variable = ... do some file loading stuff ...
except:
variable = ""
有没有办法把它浓缩成一个表达式?像if else语句一样,您可以转换:
variable = ""
if something:
variable = somethingelse
else:
variable = ""
进入
variable = somethingelse if something else ""
试一试有没有类似的东西?
下面是一个上下文管理器,它提供了一点快捷方式:
用法:
这里的基本思想是,上下文管理器返回传递给它的任何默认值,然后将其分配给在
with
语句的as
子句中指定的变量。然后,在上下文中,执行一个试图分配给同一个变量的语句。如果它引发异常,则上下文管理器捕获并静默忽略它,但由于未发生分配,因此默认值保持不变。对于生成单个值的多行计算可能特别有用。
我认为代码是不言而喻的。它返回由
success
返回的值,除非有错误,否则返回由failure
返回的值。如果do_some_file_loading_stuff
是一个表达式,而不仅仅是一个函数调用,那么也将其包装在lambda
中。编辑:@kindall和我对他的版本做了一些改进,所以它和我的一样快,如果你想的话可以称为完全相同,有更多的功能,并且行数相同。使用它!
由于agf已经提供了我推荐的方法,下面是他的例程的一个版本,其中有一些小的改进:
此版本:
允许您指定将作为附加可选参数捕获的异常。您应该始终捕获将执行此任务的最小异常集,并让无法处理的异常向调用者冒泡。
支持对故障值使用普通值和函数。这就省去了你在很多情况下使用lambda。(当然,您可以使用
str
,而不是lambda: ''
。)相关问题 更多 >
编程相关推荐