繁体   English   中英

实例检查良好做法之前没有检查?

[英]None check preceding an isinstance check good practice?

在Python中执行isinstance检查之前是否测试None是否是一种好习惯? 例如:

if x is not None and isinstance(x, (int, float)):
    # Some code over here 
    pass

还是我可以没有,这是否足够?

if isinstance(x, (int, float)):
    # Some code over there 
    pass

要回答您的问题,不必进行a is not None检查,因为-

>>> isinstance(None, (int, float))
False

这意味着,如果xNone ,则isinstance条件无论如何都将返回False ,从而使x is not None检查冗余。 所以总而言之

if isinstance(x, (int, float)):
    ...

效果也一样。


此外,如果您想测试对象是否本质上是数字的,则更简单的方法是使用numbers模块-

import numbers
if isinstance(x, numbers.Number):
    ...

请注意, numbers.Number从层次结构的最根开始测试所有数字对象。 这也包括复数,因此,如果这是不是你想要的,你可以测试numbers.Realnumbers.Rational代替。

Python 2.7.14 (default, Sep 20 2017, 01:25:59) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> isinstance(None, (int, float))
False
>>> 

它不会引起任何错误,所以我实际上更喜欢没有'is None'检查的版本,因为它的代码更少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM