Python检查下面的所有值都不是None

时间:2017-05-10 11:26:39

标签: python python-3.x

检查以下所有值的最佳方法是不是None。这就是我的尝试:

    user = url_string.get('user', None)
    subject = url_string.get('subject', None)
    email = url_string.get('email', None)
    from_address = url_string.get('from_address', None)

    if not any(user, subject, email,from_address):
        raise Exception('missing data')

3 个答案:

答案 0 :(得分:5)

由于您希望定义所有这些代码,因此以下代码将非常pythonic。由于

  

比获得许可更容易请求宽恕。这个常见的Python   编码风格假定存在有效的键或属性   如果假设被证明是假的,则捕获异常。这干净又快   风格的特点是存在许多尝试和除外   声明。该技术与许多人共同的LBYL风格形成鲜明对比   其他语言,如C.

https://docs.python.org/2/glossary.html

try:
    user = url_string['user']
    subject = url_string['subject']
    email = url_string.get['email']
    from_address = url_string['from_address']
except KeyError:
        raise Exception('missing data')

正如评论中所提到的,这确实留下了字典中的一个值为None并且可以通过测试的可能性。但是,我假设您使用get('...',None)假设字典不包含空值。如果它确实包含空值,请考虑Moses Koledoye的解决方案。

答案 1 :(得分:4)

您可以在变量的可迭代中检查None的包含:

if None in (user, subject, email, from_address):
    raise Exception('missing data')

或者更好的方法是将代码置于try / of KeyError之外,并在处理异常时引发自定义异常。

答案 2 :(得分:2)

试试这个:

if None in [user, subject, email,from_address]:
        raise Exception('missing data')