我最近不得不对可能尚未初始化的任何变量(其默认值为None
)执行小型检查。我想出了这个:
if None in (var1, var2, var3):
error_out()
虽然在我看来,接近美丽,但我想知道 - 这是一个很好的方法吗?这是 方式吗?是否有任何情况会产生一些意想不到的结果?
答案 0 :(得分:11)
首先要做的事情是:你的代码是有效的,可读的,简洁的...所以它可能不是 方式(成语随着时间和新语言特征而演变)但它肯定是<强>一种以pythonic方式进行的方式。
其次,只有两点意见:
在python中生成错误的标准方法是raise Exceptions 。你当然可以将你的异常包装在一个函数中,但由于这很不寻常,我只是想知道你是否因某些特定原因选择了这个设计。由于您可以编写自己的Exception类,因此即使是将错误消息记录到文件中的样板代码也可以在类本身内而不是在包装函数中。
您编写测试的方式是您将无法将None
指定为变量的值。现在这可能不是问题,但可能会限制您将来的灵活性。另一种检查初始化的方法可能是简单地不声明相关变量的初始值,然后执行以下操作:
try:
self.variable_name
except NameError:
# here the code that runs if the variable hasn't been initialised
finally:
# [optional] here the code that should run in either case
答案 1 :(得分:9)
一种稍微不同的方法是使用the built-in all
method;但是,这也会捕捉0
或""
之类的虚假值,这可能不是您想要的:
>>> all([1, 2, 3])
True
>>> all([None, 1, 2])
False
>>> all([0, 1])
False
答案 2 :(得分:5)
请允许我留下我的两分钱:
>>> any(a is None for a in [1,0])
False
>>> any(a is None for a in [1,0, None])
True
所以可以:
def checkNone(*args):
if any(arg is None for arg in args):
error_out()
这里没什么新东西。只是恕我直言,部分any arg is None
可能更具可读性