您可以使用dis模塊來分析每種情況,以確定發生了什麼。例如:
In [1]: import dis
In [2]: def test():
...: return 3 > 2 is True
...:
In [3]: dis.dis(test)
2 0 LOAD_CONST 1 (3)
3 LOAD_CONST 2 (2)
6 DUP_TOP
7 ROT_THREE
8 COMPARE_OP 4 (>)
11 JUMP_IF_FALSE_OR_POP 21
14 LOAD_GLOBAL 0 (True)
17 COMPARE_OP 8 (is)
20 RETURN_VALUE
>> 21 ROT_TWO
22 POP_TOP
23 RETURN_VALUE
這意味着堆棧看起來像這樣每個步驟後:
0: 3
3: 3 2
6: 3 2 2
7: 2 3 2
8: 2 True
11: 2
14: 2 True
17: False (comparison was: "2 is True")
20: (False is returned)
對我來說,它看起來像Python中的錯誤是誠實的。也許有一些很好的解釋,爲什麼會發生這種情況,但我會向上遊彙報。
只是重新改寫了它等價的方式,代碼的作用:
if 3 > 2:
if 2 is True:
return True
re