-3

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

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

当我第一次使用那部分代码时,它可以完美地工作,但之后它会向我显示语法错误,这很奇怪,因为它是一个有效的字典。

4

1 回答 1

6

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


从这个答案中引用:

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'}
于 2013-01-04T09:12:55.373 回答