我今天在其他人的代码中找到了以下构造:
True
据我了解,如果它们尚未定义,则定义False
和NameError
。所以如果定义它们就不应该抛出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,那么它是否应该通过异常处理而不显示语法错误?
答案 0 :(得分:23)
此代码是为Python 2.x编写的,并且不支持Python 3.x(其中True
和False
是真正的关键字)。
由于{3}中的True
和False
是关键字,因此您将获得无法捕获的SyntaxError
。
此代码的存在是因为Python的版本很旧。在Python 2.2(2001年发布!)中,True
和False
不作为预定义名称存在,因此此代码将提供兼容的定义,以便以后的代码可以简单地使用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之前的版本)