Python 为什么OR语句的切换顺序会修复TypeError:'<=';在'之间不受支持;str';和';int';?

Python 为什么OR语句的切换顺序会修复TypeError:'<=';在'之间不受支持;str';和';int';?,python,validation,types,logic,typeerror,Python,Validation,Types,Logic,Typeerror,我正在做一些基本的数据验证,我很困惑。我有以下功能: def is_int_gt2(num): if num <= 2 or type(num) != int: return False else: return True 现在我有了一个工作函数,但我不知道为什么。为什么切换条件的顺序会修复功能?谢谢。在您的第一个代码块中,在您的第一个代码块中,num这个问题的答案是@Have a nice day,但我建议改用try and except

我正在做一些基本的数据验证,我很困惑。我有以下功能:

def is_int_gt2(num):
    if num <= 2 or type(num) != int:
        return False
    else:
        return True

现在我有了一个工作函数,但我不知道为什么。为什么切换条件的顺序会修复功能?谢谢。

在您的第一个代码块中,在您的第一个代码块中,
num这个问题的答案是@Have a nice day,但我建议改用try and except块

try:
    if num > 2:
        return True
    else:
        return False
except TypeError:
    return False
通过这种方式,代码更加清晰,因为您不存在仅仅更改比较顺序就会产生错误的问题。它妥善处理案件,也容易理解

编辑:要更好地理解
运算符,请参阅

您描述的行为是因为短路评估

引述资料来源: “短路评估 Python有时可以在计算所有涉及的子表达式和对象之前确定布尔表达式的真值。例如,Python或运算符在发现被认为是真的内容时,会立即停止计算操作数。例如,以下表达式始终为真:

>>> True or 4<3
True
备注:除此之外的尝试方法更好

案例2:
num=3

----------------------
num = 3
try except method
time taken is: 0.2548527
----------------------
num = 3
if else method
time taken is: 0.5341225000000001
备注:除此之外的尝试方法更好

案例3:
num=“a”

备注:如有其他方法更佳

结论:很明显,try-except方法比实际捕获异常时更快。因此,只要num是整数,try-except更好,但如果num不是整数,那么if-else方法会更好。由您决定使用哪种方法


注意:这里给出的时间是特定于我的系统的。它可能与您的系统略有不同。这里提到的时间是每种方法一百万(1000000)个循环中的最佳时间

问题的答案是@Have a nice day,但我建议改用try And except块

try:
    if num > 2:
        return True
    else:
        return False
except TypeError:
    return False
通过这种方式,代码更加清晰,因为您不存在简单地更改比较顺序就会产生错误的问题。它正确地处理了这种情况,并且易于理解

编辑:要更好地理解
运算符,请参阅

您描述的行为是因为短路评估

引述资料来源: “短路评估 Python有时可以在计算所有涉及的子表达式和对象之前确定布尔表达式的真值。例如,Python或运算符一旦发现被认为是真的内容,就会停止计算操作数。例如,以下表达式始终为真:

>>> True or 4<3
True
备注:除此之外的尝试方法更好

案例2:
num=3

----------------------
num = 3
try except method
time taken is: 0.2548527
----------------------
num = 3
if else method
time taken is: 0.5341225000000001
备注:除此之外的尝试方法更好

案例3:
num=“a”

备注:如有其他方法更佳

结论:很明显,try-except方法比实际捕获异常时更快。所以,只要num是一个整数,那个么试试except更好,但若num不是整数,那个么if else方法会更好。由您决定使用哪一种


注意:此处给出的时间特定于我的系统。对于您的系统来说可能会略有不同。这里提到的时间是每个方法一百万(1000000)个循环中关于函数设计方面的最佳时间-返回False或允许异常?

在我看来,当输入不是
int
时,返回
False
是不正确的。将“a”与2进行比较没有意义,因为无法对它们进行比较

因此,最好使用异常
TypeError
,而不是返回
False

另外,函数名
是_int_gt2()
,它需要一个
int
。因此,该函数可以采用
int
中的输入。如果不是
int
,则会引发异常

抑制异常并返回
False
可能会隐藏使用此函数的应用程序中的潜在错误

简化代码为:

def is_int_gt2(num):
    if num <= 2:
        return False
    else:
        return True
def是_int_gt2(num):

如果num关于函数设计方面-返回False或允许异常?

在我看来,当输入不是
int
时,返回
False
是不正确的。将“a”与2进行比较没有意义,因为无法对它们进行比较

因此,最好使用异常
TypeError
,而不是返回
False

另外,函数名
是_int_gt2()
,它需要一个
int
。因此,该函数可以采用
int
中的输入。如果不是
int
,则会引发异常

抑制异常并返回
False
可能会隐藏使用此函数的应用程序中的潜在错误

简化代码为:

def is_int_gt2(num):
    if num <= 2:
        return False
    else:
        return True
def是_int_gt2(num):

如果num,try-except块是否有意义地降低了性能?它比or语句慢吗?谢谢@user15930505查看我的第二版这太完美了,谢谢@Muhd.try-except块是否有意义地降低了性能?它比or语句慢吗?谢谢@user15930505看我的第二版这太完美了,谢谢@Muhd。