2024-09-27 22:20:37 发布
网友
我今天在其他人的代码中发现了以下构造:
try: True, False except NameError: True = 1==1; False = 1==0
据我所知,它定义了True和{},如果它们还没有定义的话。所以如果定义了它们,它就不会抛出NameError-异常,对吗?在
True
NameError
我在一个壳里试过这个,它向我展示了SyntaxError: can't assign to keyword
SyntaxError: can't assign to keyword
我的问题是,如果定义了True和False,它为什么会触发语法错误?如果我的系统上有True和False,它不应该通过异常处理而不显示语法错误吗?在
这段代码是为python2.x编写的,不能在python3.x上工作(其中True和False是真正的关键字)。在
False
由于True和{}是python3中的关键字,因此您将得到一个您无法捕获的SyntaxError。在
SyntaxError
这段代码的存在是因为Python非常旧的版本。在Python2.2中(2001年发布!),True和False不是作为预定义名称存在的,因此此代码将提供兼容的定义,以便以后的代码可以简单地使用True和{}。在
在将Python2.x代码转换为Python3.x时,请删除这些行;它们是历史性的,在Python3.x中没有任何用处。如果在其他人的代码中看到这些行,则表明程序不是为Python3编写或移植的。在
SyntaxError出现在字节编译阶段,在代码运行之前,因此您无法使用try/except来绕过它。在
try
except
在python2.3中引入了boolean类型:https://docs.python.org/2.3/whatsnew/section-bool.html
所以这段代码是为旧版本的Python编写的,例如2.3+支持非常旧的Python版本(即2.3之前的版本)
这段代码是为python2.x编写的,不能在python3.x上工作(其中
True
和False
是真正的关键字)。在由于}是python3中的关键字,因此您将得到一个您无法捕获的
True
和{SyntaxError
。在这段代码的存在是因为Python非常旧的版本。在Python2.2中(2001年发布!),}。在
True
和False
不是作为预定义名称存在的,因此此代码将提供兼容的定义,以便以后的代码可以简单地使用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之前的版本)
相关问题 更多 >
编程相关推荐