-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 に答える