Python 3,eval,SyntaxError:解析时出现意外的EOF

时间:2018-07-20 15:50:19

标签: python-3.x eval

我正在测试一个代码示例,但不断出现错误

# 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个用于存储值的字段。

1 个答案:

答案 0 :(得分:0)

您必须显式地 quote 字符串输入,如书中所写。

例如:new?=>'lucas'