TypeError: unsupported operand type(s) for |: 'tuple' and 'bool'
TypeError: unsupported operand type(s) for |: 'tuple' and 'bool'
当我尝试使用“|”时出现奇怪的错误if 中的运算符与元组。
#example
Myset = ((1, 3), (4, 6), (3, 1), (2, 2), (3, 5), (2, 4), (3, 3))
courd = (4,6)
if(courd[0] - 1 ,courd[1] - 1 in d ):
isSafe = True # work as expected
但如果我尝试这样的事情:
if((courd[0] - 1 ,courd[1] - 1 in d) | 2==2 ): # or something else that involved "|"
isSafe = True
我正在
Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
if((courd[0] - 1 ,courd[1] - 1 in d )| (2 == 2)):
TypeError: unsupported operand type(s) for |: 'tuple' and 'bool'
你需要使用parens,根据需要,像这样
if((courd[0] - 1, courd[1] - 1) in d):
pass
现在,它将创建一个元组 (courd[0] - 1, courd[1] - 1)
并检查它是否在 d
中。在下一个案例中,
if((courd[0] - 1, courd[1] - 1 in d) | 2 == 2):
pass
(courd[0] - 1, courd[1] - 1 in d)
将首先被评估,这将创建一个元组。然后 2 == 2
将被评估(因为 |
的优先级低于 ==
)到 True
,这基本上是一个布尔值。所以,你正在有效地做
tuple | boolean
这就是您收到该错误的原因。
注:|
在Python中称为按位或。如果你的意思是逻辑OR
,你需要这样写
if(((courd[0] - 1, courd[1] - 1) in d) or (2 == 2)):
pass
现在,将首先评估 (courd[0] - 1, courd[1] - 1)
以创建一个元组,然后检查该元组是否存在于 d
中(这将 return True
或 False
,一个布尔值)然后 (2 == 2)
将被计算为 returns True
。现在逻辑 or
很乐意使用两个布尔值。
当我尝试使用“|”时出现奇怪的错误if 中的运算符与元组。
#example
Myset = ((1, 3), (4, 6), (3, 1), (2, 2), (3, 5), (2, 4), (3, 3))
courd = (4,6)
if(courd[0] - 1 ,courd[1] - 1 in d ):
isSafe = True # work as expected
但如果我尝试这样的事情:
if((courd[0] - 1 ,courd[1] - 1 in d) | 2==2 ): # or something else that involved "|"
isSafe = True
我正在
Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
if((courd[0] - 1 ,courd[1] - 1 in d )| (2 == 2)):
TypeError: unsupported operand type(s) for |: 'tuple' and 'bool'
你需要使用parens,根据需要,像这样
if((courd[0] - 1, courd[1] - 1) in d):
pass
现在,它将创建一个元组 (courd[0] - 1, courd[1] - 1)
并检查它是否在 d
中。在下一个案例中,
if((courd[0] - 1, courd[1] - 1 in d) | 2 == 2):
pass
(courd[0] - 1, courd[1] - 1 in d)
将首先被评估,这将创建一个元组。然后 2 == 2
将被评估(因为 |
的优先级低于 ==
)到 True
,这基本上是一个布尔值。所以,你正在有效地做
tuple | boolean
这就是您收到该错误的原因。
注:|
在Python中称为按位或。如果你的意思是逻辑OR
,你需要这样写
if(((courd[0] - 1, courd[1] - 1) in d) or (2 == 2)):
pass
现在,将首先评估 (courd[0] - 1, courd[1] - 1)
以创建一个元组,然后检查该元组是否存在于 d
中(这将 return True
或 False
,一个布尔值)然后 (2 == 2)
将被计算为 returns True
。现在逻辑 or
很乐意使用两个布尔值。