【问题标题】:Weird syntax error in python 3.x logic [duplicate]python 3.x逻辑中的奇怪语法错误[重复]
【发布时间】:2014-01-31 16:36:36
【问题描述】:

由于某种原因,以下逻辑评估中存在语法错误:

True is not None and not False is not not not None

错误可以归结为以下语句:

False is not not None

第二个not 突出显示的位置。

这根本不重要,但我只是对为什么这可能会失败感兴趣。有什么想法吗?

【问题讨论】:

  • 是的,严格来说不是重复的,但解释是一样的。
  • @BartoszKP:语法错误的原因完全相同。所有比较运算符具有相同的优先级;不管你使用isis not==!=<><=>=都没有关系;如果您关注not 中的任何一个,结果是相同的。
  • 你真的不应该比较布尔值;将其留给ifwhile 语句。
  • @MartijnPieters 是的,这就是我所说的“解释是一样的”的意思;)另一方面,我的意思是“严格来说不是重复的”,这个问题有点不同:)

标签: python logic


【解决方案1】:

要记住的另一件事是isnotis not 实际上是三个独立的运算符。换句话说,is not 不是(不是双关语)isnot 的组合。

在你的例子中

False is not not None

Python 尝试将 Falsenot 传递给 is not 运算符。由于not 不是有效的操作数,因此会导致语法错误。

【讨论】:

  • (这种丑陋是isis not根本不应该是运算符的原因之一,而是两个内置函数is()is_not()。)
【解决方案2】:

is not not 不起作用。这不是一件坏事,因为它从来不需要。

is notis 具有相同的运算符优先级,这是有道理的。 is 的运算符优先级高于not,否则x is not y 将表示x is (not y),当它需要表示x is not (y) 时。

但您无法确定是否为a is not not b,因为您无法在not b 之前得到is not 的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多