如果未定义,则定义True会导致语法错误

ap0*_*ap0 20 python python-3.x

我今天在别人的代码中找到了以下构造:

try: True, False
except NameError: True = 1==1; False = 1==0
Run Code Online (Sandbox Code Playgroud)

据我了解这一点,它定义TrueFalse,如果他们尚未确定.所以如果定义它们就不应该抛出NameError-Exception,对吧?

我已经在shell中尝试了这个,它向我展示了它 SyntaxError: can't assign to keyword

我的问题是,如果定义了True和False,为什么它甚至会出现语法错误?如果我的系统上有True和False,那么它是否应该超过异常处理并且不显示语法错误?

nne*_*neo 23

此代码是为Python 2.x编写的,不适用于Python 3.x(其中True并且False是真正的关键字).

由于TrueFalse是关键字在Python 3,你会得到一个SyntaxError你不能赶上.

由于Python的旧版本,此代码存在.在Python 2.2(2001年发布!)中,TrueFalse没有作为预定义名称存在,因此这段代码将提供兼容的定义,以便后面的代码可以简单地使用TrueFalse.

将Python 2.x代码转换为Python 3.x时,请删除这些行; 它们是历史的,在Python 3.x中没用.如果你在别人的代码中看到这些行,它们肯定表明该程序没有为Python 3编写或移植.

  • 是的,确实,他们使用了 1 和 0。请注意,“True”和“False”在 Python 2.2.1 中被添加为常量,但它们分别简单地定义为“1”和“0”。实际的“bool”类型仅在 Python 2.3 中通过 [PEP 285](https://docs.python.org/2.3/whatsnew/section-bool.html) 添加。 (2认同)
  • (到目前为止,`bool`仍然是`int`的子类型) (2认同)

Eth*_*man 9

SyntaxError在代码运行之前的字节编译阶段出现 - 所以你不能用try/ 绕过它except.