use*_*970 -2 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)
Run Code Online (Sandbox Code Playgroud)
有问题的代码是:
MailName = eval(string)
Run Code Online (Sandbox Code Playgroud)
语法错误:
Run Code Online (Sandbox Code Playgroud)MailName = eval(string) File "<string>", line 2 {'familyname': 'josh', 'pass': 'UGGlXJCpl', 'email': 'chat@gmail.com', 'n ame': 'justin'}Run Code Online (Sandbox Code Playgroud)^ SyntaxError: invalid syntax
当我第一次使用该部分代码时,它完全正常工作,但之后它显示了语法错误,这很奇怪,因为它是一个有效的字典.
我会将数据存储在JSON中并使用它来加载它json.load(file object)- 这比使用更安全eval()
引用这个答案:
eval()将允许恶意数据危害您的整个系统,杀死您的猫,吃掉您的狗并与您的妻子做爱.
最近有一个关于如何在python-dev列表上安全地做这种事情的线程,结论是:
Run Code Online (Sandbox Code Playgroud)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"
}
Run Code Online (Sandbox Code Playgroud)
然后像这样加载它:
>>> with open('cred.txt', 'rb') as f:
>>> data = json.load(f)
>>> print data
{'familyname': 'josh', 'pass': 'UGGlXJCpl', 'email': 'chat@gmail.com', 'name': 'justin'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3382 次 |
| 最近记录: |