Python 2 和 Python 3 内置的 all() 函数表现不一样
Python 2 and Python 3 built-in all() function not behaving equally
以下代码:
a = None
b = None
all([a, b, a > b]) # Returns False in python 2 but TypeError in python 3
python 错误 3:
TypeError: '>' not supported between instances of 'NoneType' and 'NoneType'
好像是python2版本短路了,但是python3版本没有。是这样吗?为什么会这样?这是一个错误吗?我应该举报吗?
我已经在 Python 2.7.17、3.6.9 和 3.8.2
中测试了这段代码
短路无关紧要。在执行 all
之前评估整个列表。
Python 2 比较宽松。在 Python 2 中,您可以在字符串和整数、许多不同类型的对象和 None
之间使用 <
,而不会出现错误。在 Python 3 中,规则收紧了,因此您只能在具有明确含义的情况下使用 <
。
如果您需要的功能是
a and b and a > b
那我建议你用那个。对于该表达式,如果 a
或 b
是 None
.
,则不会计算 a > b
不是错误,这是故意的。
Python 3 是对 Python 2 的改进。从逻辑上讲,这应该给您一个错误,因为您无法比较是否没有什么比某物更大,因为,嗯,它是什么都没有!
使用 Python 2 也毫无意义,除非您有一些遗留代码需要 is(但即使那样我也会尝试移动到 Python 3)作为 support for Python 2 stopped 01/01/2020
以下代码:
a = None
b = None
all([a, b, a > b]) # Returns False in python 2 but TypeError in python 3
python 错误 3:
TypeError: '>' not supported between instances of 'NoneType' and 'NoneType'
好像是python2版本短路了,但是python3版本没有。是这样吗?为什么会这样?这是一个错误吗?我应该举报吗?
我已经在 Python 2.7.17、3.6.9 和 3.8.2
中测试了这段代码短路无关紧要。在执行 all
之前评估整个列表。
Python 2 比较宽松。在 Python 2 中,您可以在字符串和整数、许多不同类型的对象和 None
之间使用 <
,而不会出现错误。在 Python 3 中,规则收紧了,因此您只能在具有明确含义的情况下使用 <
。
如果您需要的功能是
a and b and a > b
那我建议你用那个。对于该表达式,如果 a
或 b
是 None
.
a > b
不是错误,这是故意的。
Python 3 是对 Python 2 的改进。从逻辑上讲,这应该给您一个错误,因为您无法比较是否没有什么比某物更大,因为,嗯,它是什么都没有!
使用 Python 2 也毫无意义,除非您有一些遗留代码需要 is(但即使那样我也会尝试移动到 Python 3)作为 support for Python 2 stopped 01/01/2020