我正在研究一个评估数据库查询的程序。在下面,我定义一个记录,并显示使用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
如果query =“ gender =='M'”(如注释所示),则eval()起作用。但是,当查询为“部门=='销售'”时,出现语法错误。很明显,这段时间是造成此问题的原因(我尝试使用字典中的其他键,但没有任何问题)。是否有理由不接受该期限?有什么方法可以让eval()识别周期吗?
期待您的回答!
谢谢!
答案 0 :(得分:1)
Python不允许使用句点.
作为简单变量名称的一部分。
Dept. = 'x' # NOT OK
dept = 'x' # ok
变量必须以字母或下划线开头,然后可以有更多字母,数字或下划线。句点用于引用班级成员,但这是另一个答案。
“ 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)