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

时间:2015-06-25 06:31:17

标签: python python-3.x

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

True

据我了解,如果它们尚未定义,则定义FalseNameError。所以如果定义它们就不应该抛出SyntaxError: can't assign to keyword - 例外,对吧?

我在shell中为自己尝试了这个,它显示了Maximum = lines.OrderByDescending(a => a.Length).First().ToString(); Minimum = lines.OrderBy(a => a.Length).First().ToString();

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

3 个答案:

答案 0 :(得分:23)

此代码是为Python 2.x编写的,并且不支持Python 3.x(其中TrueFalse是真正的关键字)。

由于{3}中的TrueFalse是关键字,因此您将获得无法捕获的SyntaxError

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

将Python 2.x代码转换为Python 3.x时,请删除这些行;它们是历史的,在Python 3.x中没用。如果您在其他人的代码中看到这些行,则可以确定该程序未针对Python 3编写或移植。

答案 1 :(得分:9)

在代码运行之前,

def replaceWithId(alarmId: String, fieldName: String, fieldValue: Map[String, Any]) = { client.execute { update id alarmId in IndexType script """{"file":"removeOperationField"}""" }} 出现在字节编译阶段 - 因此您无法使用SyntaxError / try解决此问题。

答案 2 :(得分:3)

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

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