检查其中一个变量是否设置为None

mal*_*ree 31 python

我最近不得不对可能尚未初始化的任何变量(其默认值为None)进行小型检查.我想出了这个:

if None in (var1, var2, var3):
    error_out()
Run Code Online (Sandbox Code Playgroud)

虽然,在我看来,接近美丽,我在想 - 这是一个很好的方法吗?这是做的呢?是否有任何情况会产生一些意想不到的结果?

mac*_*mac 13

首先第一件事情:你的代码是有效的,可读性强,简洁...所以它可能不是做(成语随着时间的推移和新的语言功能的发展)的方式,但它肯定是一个做在Python的方式的方式.

其次,只有两点意见:

在python中生成错误的标准方法是引发异常.你当然可以将你的异常包装在一个函数中,但由于这很不寻常,我只是想知道你是否因某些特定原因选择了这个设计.因为您可以编写自己的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
Run Code Online (Sandbox Code Playgroud)


Mar*_*off 9

一种稍微不同的方法是使用内置all方法 ; 但是,这也会捕获像0或者的假值"",这可能不是你想要的:

>>> all([1, 2, 3])
True
>>> all([None, 1, 2])
False
>>> all([0, 1])
False
Run Code Online (Sandbox Code Playgroud)


use*_*759 6

请允许我在这里留下两分钱:

>>> any(a is None for a in [1,0])
False
>>> any(a is None for a in [1,0, None])
True
Run Code Online (Sandbox Code Playgroud)

所以人们可以:

def checkNone(*args):
    if any(arg is None for arg in args):
        error_out()
Run Code Online (Sandbox Code Playgroud)

这里没什么新鲜的.只是恕我直言,也许这部分any arg is None更具可读性