如果未定义,则定义True将导致语法

2024-09-27 22:20:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

据我所知,它定义了True和{},如果它们还没有定义的话。所以如果定义了它们,它就不会抛出NameError-异常,对吗?在

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

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


Tags: to代码falsetrue定义系统cankeyword
3条回答

这段代码是为python2.x编写的,不能在python3.x上工作(其中TrueFalse是真正的关键字)。在

由于True和{}是python3中的关键字,因此您将得到一个您无法捕获的SyntaxError。在

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

在将Python2.x代码转换为Python3.x时,请删除这些行;它们是历史性的,在Python3.x中没有任何用处。如果在其他人的代码中看到这些行,则表明程序不是为Python3编写或移植的。在

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

在python2.3中引入了boolean类型:https://docs.python.org/2.3/whatsnew/section-bool.html

所以这段代码是为旧版本的Python编写的,例如2.3+支持非常旧的Python版本(即2.3之前的版本)

相关问题 更多 >

    热门问题