昨日,在麻省理工學院公開課:計算機科學及編程導論第七集大概25分鐘左右上看到一段關於檢查輸入類型的代碼,個人覺得其中的循環讓我耳目一新,我自己就依樣畫葫蘆把它改了一下,由於是新手,改的可能不好。下面就是我自己改的一些代碼:
input_ok = True
while input_ok:
#value = input("please enter a float: ")
try:
value = float(raw_input("please enter a float: ")) # 類型轉換
except EOFError, e: # 將錯誤原因放在對象e中
print e
except IOError, e:
print e
except ValueError, e: # 數值錯誤異常處理
print e
else: # 如果沒有異常,則執行
if type(value) == type(0.0):
input_ok = False
else:
print "Error! Are you sure it's a float?"
finally: # 不管有沒有異常都執行
print "\n"
新改的代碼加入了一個類型轉換和異常處理,同時把input()改爲了raw_input(),類型轉換函數float(x)是將對象x轉換爲浮點數;異常處理是由於如果用戶輸入的不是數值,比如說是一個字符a,那麼float()函數就會轉換出錯,這時就需要異常處理;至於把input()改爲raw_input(),是因爲input() 函數會把你輸入的東西當做 Python 代碼進行處理,這麼做會有安全問題,比如說下面這幅圖:
我想要用戶輸入一個數字,但用戶卻輸入一個字母,這樣卻依然行得通,從而導致了安全問題,input()函數返回的是數值類型,raw_input()返回的字符串類型。個人認爲儘量避免用input(),能用raw_input()則用raw_input()。
其實,我最推崇的就是這段代碼中的循環語句,因爲它能讓用戶在輸錯的情況下再次輸入。