我正在测试一个代码示例,但不断出现错误
# interactive updates
import shelve
from person import Person
fieldnames = ('name', 'age', 'job', 'pay')
db = shelve.open('class-shelve')
while True:
key = input('\nKey? => ')
if not key: break
if key in db:
record = db[key] # update existing record
else: # or make/store new rec
record = Person(name='?', age='?') # eval: quote strings
for field in fieldnames:
currval = getattr(record, field)
newtext = input('\t[%s]=%s\n\t\tnew?=>' % (field, currval))
if newtext:
#print('Blah Blah' + newtext)
setattr(record, field, eval(newtext))
#setattr(record, field, 'Testing')
db[key] = record
db.close()
使用eval函数时尝试使用setattr更新记录时出现此错误。
SyntaxError: unexpected EOF while parsing
问题似乎是评估的一部分,我知道eval的安全性问题,但是在这里,我试图使示例工作。 Class Person非常简单,有4个用于存储值的字段。
答案 0 :(得分:0)
您必须显式地 quote 字符串输入,如书中所写。
例如:new?=>'lucas'