表达式以句点结尾时的 eval() 语法错误
eval() syntax error when the expression ends with a period
我正在开发一个评估数据库查询的程序。下面我定义了一条记录,并显示了我在使用 eval()
时遇到的问题
record = {'name': 'John_Smith', 'gender': 'M', 'age':45,'Dept.': 'Sales'}
query = "Dept. == 'Sales'"
#query = "gender == 'M'"
if eval(query, {__builtins__: None}, record):
print(record)
我得到的错误是
File "<string>", line 1
Dept. == 'Sales'
^
SyntaxError: invalid syntax
if query = "gender == 'M'"(如评论中所示),eval() 确实有效。但是,当查询为 "Dept. == 'Sales'" 时,出现语法错误。很明显,是句点导致了这个问题(我尝试使用字典中的其他键,但没有任何问题)。有没有理由不接受这个时期?有没有办法让 eval() 识别句点?
期待您的回答!
谢谢!
Python 不允许将句点 .
作为简单变量名称的一部分。
Dept. = 'x' # NOT OK
dept = 'x' # ok
变量必须以字母或下划线开头,后面可以有更多的字母、数字或下划线。句点用于引用 class 成员,但这是另一个答案。
"Dept" 字符串是字典的一部分,因此它对 python 没有可见性。可作为词典的一部分进行引用:
if record["Dept."] == 'blah':
...
因此您的代码可以像这样工作:
record = {'name': 'John_Smith', 'gender': 'M', 'age':45,'start_date':'2010/05/01','salary': 50000,'Dept.': 'Sales'}
query = "record['Dept.'] == 'Sales'"
if eval(query):
print(record)
由于您将 record
作为第三个参数(局部变量的对象)传递给 eval()
,因此只需删除句点就足够了。
record = {'name': 'John_Smith', 'gender': 'M', 'age':45,'start_date':'2010/05/01','salary': 50000,'Dept': 'Sales'}
query = "Dept == 'Sales'"
if eval(query, {__builtins__: None}, record):
print(record)
我正在开发一个评估数据库查询的程序。下面我定义了一条记录,并显示了我在使用 eval()
时遇到的问题record = {'name': 'John_Smith', 'gender': 'M', 'age':45,'Dept.': 'Sales'}
query = "Dept. == 'Sales'"
#query = "gender == 'M'"
if eval(query, {__builtins__: None}, record):
print(record)
我得到的错误是
File "<string>", line 1
Dept. == 'Sales'
^
SyntaxError: invalid syntax
if query = "gender == 'M'"(如评论中所示),eval() 确实有效。但是,当查询为 "Dept. == 'Sales'" 时,出现语法错误。很明显,是句点导致了这个问题(我尝试使用字典中的其他键,但没有任何问题)。有没有理由不接受这个时期?有没有办法让 eval() 识别句点?
期待您的回答!
谢谢!
Python 不允许将句点 .
作为简单变量名称的一部分。
Dept. = 'x' # NOT OK
dept = 'x' # ok
变量必须以字母或下划线开头,后面可以有更多的字母、数字或下划线。句点用于引用 class 成员,但这是另一个答案。
"Dept" 字符串是字典的一部分,因此它对 python 没有可见性。可作为词典的一部分进行引用:
if record["Dept."] == 'blah':
...
因此您的代码可以像这样工作:
record = {'name': 'John_Smith', 'gender': 'M', 'age':45,'start_date':'2010/05/01','salary': 50000,'Dept.': 'Sales'}
query = "record['Dept.'] == 'Sales'"
if eval(query):
print(record)
由于您将 record
作为第三个参数(局部变量的对象)传递给 eval()
,因此只需删除句点就足够了。
record = {'name': 'John_Smith', 'gender': 'M', 'age':45,'start_date':'2010/05/01','salary': 50000,'Dept': 'Sales'}
query = "Dept == 'Sales'"
if eval(query, {__builtins__: None}, record):
print(record)