2015-12-02 22 views
0

我輸入了用於計算md5散列值的代碼,我希望在用戶單擊按鈕時返回散列值。但是,當我點擊按鈕時,出現「TypeError:強制爲Unicode:需要字符串或緩衝區,找到函數」錯誤。我試圖將哈希值轉換爲字符串,但它沒有解決它。md5散列值出錯

def openfile(): 
filename = askopenfilename(parent=root) 
f = open(filename) 
f.read() 
print (filename) 

def hashmd5(): 
md5 = hashlib.md5() 
with open(openfile, "rb") as f: 
for block in iter(lambda: f.read(128), ""): 
md5.update(block) 
print (m.hexdigest) 

def helloCallBack(): 
tkMessageBox.showinfo("Calculate MD5") 
B = Button(text ="Calculate MD5", command = hashmd5) 
B.pack() 

更新:openfile

def openfile(): 
filename = askopenfilename(parent=root) 
f = open(filename) 
f.read() 
print (filename) 

def savefile(self): 
filename = tkFileDialog.asksaveasfilename(**self.file_opt) 
if filename: 
return open(filename, 'w') 

def hashmd5(): 
md5 = hashlib.md5() 
with (filename), "rb") as f: 
for block in iter(lambda: openfile.read(128), ""): 
md5.update(block) 
print (md5.hexdigest) 

回答

0

缺少括號。但是,打開文件兩次有什麼意義? (都在openfile和hashmd5中?)

+0

對不起。我沒有意識到我遺漏了括號。我在我的hashmd5函數中刪除了打開的文件代碼,但在此之後我仍然有錯誤。 – JoanT

+0

什麼樣的錯誤?請更新代碼段的縮進!我想你想'打印md5.heaxidgest'而不是'm.hexdigest' – fodma1

+0

好吧。我已經稍微改變了代碼。我仍然有錯誤「NameError:全局名稱'文件名'未定義」 – JoanT

1

錯誤:「NameError:全局名稱'文件名'未定義」是因爲您沒有在def hashmd5()函數中定義文件名,因此您需要按順序使用self.filename使用文件名變量