2013-08-26 335 views
0

我想學習python並試圖編寫一個簡單的腳本。使用raw_input創建的變量似乎有問題。我相信這很簡單,但我只是沒有背景知識來解決這個問題。以下是我已經試過,什麼工作:AttributeError:'模塊'對象沒有屬性'a'

#!/usr/bin/python 

import hashlib 

v = raw_input("Enter your value: ") 
print "Which hash algorithm do you want to use?" 
# This fails 
a = raw_input("md5, sha1, sha224, sha256, sha384, sha512: ") 
h = hashlib.a(v) 
h.hexdigest() 

# This works 

v = "password" 
h = hashlib.md5(v) 
h.hexdigest() 
+1

用'getattr(hashlib,a)'替換'hashlib.a'' –

回答

1

a只是存儲與字符串值的變量。 hashlib.a()只是試圖在hashlib模塊中調用一個名爲a的方法(它不存在)。儘量不使用

h = haslib.new(a) 
h.update(v) 
h.hexdigest() 
+0

這很有道理!謝謝! – user2565554

1
hashes = ("md5", "sha1", "sha224", "sha256", "sha384", "sha512") 

chosen_hash = None 

while not chosen_hash: 
    try_hash = raw_input("%s: " % (",".join(hashes)) 
    if try_hash in hashes: 
     chosen_hash = try_hash 

hash_func = getattr(hashlib, chosen_hash)() 
hash_func.update(v) 

正如@ gos1建議,你可以使用hashlib.new(chosen_hash)代替。

好的是,這將防止有人輸入foo作爲他們的選擇,並讓你的程序炸燬。

+0

使用設定字面值'{「md5」,「sha1」,...}'這將是完美的。 – nneonneo

+0

@sberry我同意。在真實世界的應用程序中,絕對不要讓用戶輸入可能被評估的原始輸入,除非您100%確定此類評估不會破壞您的程序,或者更糟...... – gos1

+1

着名的遺言「除非你是100%確定「 –

相關問題