在 Python3 中比较 int 和 None 时没有 TypeError

Posted

技术标签:

【中文标题】在 Python3 中比较 int 和 None 时没有 TypeError【英文标题】:No TypeError comparing int with None in Python3 【发布时间】:2018-02-08 22:45:11 【问题描述】:

我知道在 Python3 (3.6.1) 中比较 int 和 None 类型是无效的,如下所示:

>>> largest = None
>>> number = 5
>>> number > largest
TypeError: '>' not supported between instances of int and NoneType

但是在这个脚本里面它没有给出 TypeError。

largest = None
for number in [5, 20, 11]:
    if largest is None or number > largest:
        largest = number

当我用 python3 运行这个脚本时,它运行时没有 TypeError。为什么?

【问题讨论】:

Does Python support short-circuiting?的可能重复 你的脚本逻辑不一样。这就是为什么你没有错误。顺便说一句 max([5, 20, 11]) 工作正常 【参考方案1】:

你正在见证short circuiting

if largest is None or number > largest:
        (1)        or      (2)

当条件(1) 被评估为真时,条件(2)被执行。在第一次迭代中,largest is NoneTrue,所以 整个表达式 为真。


作为一个说明性示例,请考虑这个小 sn-p。

test = 1
if test or not print('Nope!'):
     pass

# Nothing printed 

现在,重复test=None

test = None
if test or not print('Nope!'):
     pass

Nope!

【讨论】:

谢谢。你让我在...条件 2 没有在第一次迭代中执行。【参考方案2】:

如果您仔细检查您的代码,您会注意到您将最大初始化为None,然后有条件地询问它是否为None,因此 if 语句的计算结果为True

【讨论】:

以上是关于在 Python3 中比较 int 和 None 时没有 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.10+:可选[类型] 或类型 |没有

Python3标准库:filecmp比较文件

python3新特点

python3-排序

python3 使用迭代查找一个list中最小和最大值 这段代码看不懂,希望能有大神解释一下,谢谢了

第三天——整型和布尔值