使用eval时出现“SyntaxError:invalid syntax”

时间:2013-01-04 09:08:55

标签: python dictionary

我有非常奇怪的语法错误。在第一次代码工作正常但之后 它不起作用。

MailName={}
string = ""
#pdb.set_trace()
fp=open("C:\\Users\\Dvir\\Dropbox\\chat\\cred.txt","a+")
#pdb.set_trace()

try:
    string=fp.read()

except:
    string=""

if (string !=""):
    MailName = eval(string)

有问题的代码是:

MailName = eval(string)

语法错误:

  
MailName = eval(string)   File "<string>", line 2
{'familyname': 'josh', 'pass': 'UGGlXJCpl', 'email': 'chat@gmail.com', 'n ame': 'justin'}
  
^ SyntaxError: invalid syntax

当我第一次使用该部分代码时,它完全正常工作但之后它显示了语法错误,这很奇怪,因为它是一个有效的字典。

1 个答案:

答案 0 :(得分:5)

我会将数据存储在JSON中并使用json.load(file object)加载 - 这比使用eval()

更安全

引自this answer

  

eval()将允许恶意数据危及整个系统,   杀死你的猫,吃你的狗,并爱你的妻子。

     

最近有关于如何安全地做这种事情的线索   在python-dev列表中,结论是:

It's really hard to do this properly.
It requires patches to the python interpreter to block many classes of attacks.
Don't do it unless you really want to.

您可以按如下方式格式化文本文件:(cred.txt)

{
    "familyname": "josh", 
    "email": "chat@gmail.com", 
    "name": "justin", 
    "pass": "UGGlXJCpl"
}

然后像这样加载它:

>>> with open('cred.txt', 'rb') as f:
>>>     data = json.load(f)
>>>     print data
{'familyname': 'josh', 'pass': 'UGGlXJCpl', 'email': 'chat@gmail.com', 'name': 'justin'}