我有非常奇怪的语法错误。在第一次代码工作正常但之后 它不起作用。
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
当我第一次使用该部分代码时,它完全正常工作但之后它显示了语法错误,这很奇怪,因为它是一个有效的字典。
答案 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'}