在工作中使用一些内部开发的工具时,我发现了一些我无法解释的行为。我用一个人为的例子重现了这个问题:
>>> _list = [3, 4]
>>> test0 = "string"
>>> test1 = 7
>>> _list[test0 == "string" & test1 == 7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'str' and 'int'
>>> _list[(test0 == "string") & (test1 == 7)]
4
解释器似乎首先解释&,而不是首先==。
Python Documentation指出评估顺序应为==,然后&
这是Python解释器中的错误吗?我正在使用3.6.3
答案 0 :(得分:3)
根据§6.16. Operator precedence,==
的优先级低于&
。令人困惑的是,该表从最低到最高优先级列出了运算符。 (我不得不盯着它看一分钟,以确保我没看错。)
这意味着表达式被解析为:
_list[test0 == ("string" & test1) == 7]