PyCharm比较两个and逻辑表达式时返回错误布尔值问题咨询
问题原因说明
你编写的代码存在括号位置错误,不是PyCharm的故障。
- 首先明确:
print()是Python内置函数,执行后返回值固定为None,你当前的代码写法仅将逻辑运算符左侧的表达式传入了print(),仅打印了左侧表达式的结果,整个逻辑运算的最终结果并没有被打印输出。 - 以你反馈异常的
print( 4 < 5) and (9 < 6)为例,实际执行顺序是:- 先执行
print(4 < 5),打印True,该函数调用返回None - 再执行
None and (9 < 6),运算结果为None,但你没有打印这个结果,所以你误以为整个表达式返回了True,实际你看到的只是左侧4 < 5的输出值。
- 先执行
- 原生Python交互环境(REPL)下你直接输入
(4 < 5) and (9 < 6)能得到正确结果,是因为REPL会自动打印最后一行表达式的返回值;如果你在REPL中输入和PyCharm中完全相同的代码,会先打印True,再输出None,和PyCharm运行逻辑完全一致,只是你没有注意到REPL输出的第二行返回值。
修复方案
把整个布尔表达式都放入print()的括号内即可,正确代码如下:
print( (4 < 5) and (5 < 6) ) print( (4 < 5) and (9 < 6) ) print( (1 == 2) or (2 == 2) )
运行后会输出预期的True、False、True,所有环境下运行结果一致。
内容的提问来源于stack exchange,提问作者trev84
相关产品推荐
相关产品推荐

