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



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

try: True, False
except NameError: True = 1==1; False = 1==0

据我所知,它定义了TrueFalse,如果它们还没有定义的话。所以,如果定义了它们,就不应该抛出NameError-异常,对吧?

我在一个壳里试过这个,它给我看了SyntaxError: can't assign to keyword

我的问题是,如果定义了True和False,为什么它甚至会引发语法错误?如果True和False在我的系统上可用,难道它不应该通过异常处理而不显示语法错误吗?

此代码是为Python 2.x编写的,不会在Python 3.x上工作(其中TrueFalse是真正的关键字)。

由于TrueFalse是Python3中的关键字,您将得到一个无法捕获的SyntaxError

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

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

SyntaxError出现在字节编译阶段,在代码运行之前,因此使用try/except无法绕过它。

布尔类型是在Python 2.3中引入的:https://docs.python.org/2.3/whatsnew/section-bool.html

因此,这段代码适用于旧版本的Python,例如2.3+,以支持非常旧的Python版本(即2.3之前的版本)

最新更新