2013-12-18 38 views
0

我有這個代碼是與exec拋出一個錯誤,我不能得到它的工作。它的工作原理,當 不在函數,雖然如何用exec python解決'全局名稱未定義'

def hashCheck(data): 
    exec("hashes = {'hi':'hi'}") #it was a file import before 
    print(hashes['hi']) #right here is error 
    try: 
     return(hashes[data]) #and here is also error 
    except KeyError: 
     import hashlib 
     m = hashlib.md5() 
     m.update(data) 
     return(m.hexdigest()) 
+3

你爲什麼要做'exec(「hashes = {'hi':'hi'}」)'而不是'hashes = {'hi':'hi'}'?! – rlms

+0

你的python版本是什麼?操作系統? – PasteBT

回答

1

因爲你的函數沒有分配到散列,蟒蛇編譯它是哈希是一個全局變量時假設。但是,當編譯exec字符串時,你確實有一個哈希分配,所以python假定它是一個局部變量。因此,您的exec語句將分配給本地範圍內的變量,但您的打印語句會在全局範圍內查找它。

,如果你將其更改爲類似的東西可能工作:

def hashCheck(data): 
    hashes = None 
    exec("hashes = {'hi':'hi'}") 
    print(hashes['hi']) 

這就是說,你可能不應該使用EXEC(),除非你真的知道自己在做什麼,並確信你需要它。如果你只想爲簡單的python對象進行一些人類可讀的序列化,你可能想要看看像yaml這樣的東西。

+0

這正是我正在尋找的......我意識到代碼是幾個月後XD有多糟糕,但「哈希=無」應該解決問題,ty :) – user3117152