Python檢查輸入類型

昨日,在麻省理工學院公開課:計算機科學及編程導論第七集大概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()。
其實,我最推崇的就是這段代碼中的循環語句,因爲它能讓用戶在輸錯的情況下再次輸入。

發佈了23 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章