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

时间:2018-01-06 18:54:25

标签: python

在Python中None检查之前测试不isinstance是不错的做法?例如:

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

2 个答案:

答案 0 :(得分:2)

要回答您的问题,不需要进行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.Real来测试numbers.Rational

答案 1 :(得分:0)

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
>>> 

它没有引起任何错误,因此我实际上更喜欢没有'是No'检查,因为它只是更少的代码。