2013-06-02 38 views
5

我在python中實現了一個小命令行工具,需要向用戶提出幾個問題。我使用用於用戶輸入的python庫

raw_input('Are you male or female?') 

所有的時間。現在我想能夠處理愚蠢的用戶(或者懶得閱讀/記住文檔),所以我需要檢查答案是否有意義。

gender = '' 
while gender not in ['male', 'female']: 
    gender = raw_input('Are you male or female?') 

我想知道是否存在類似argparse會自動完成這個問題,像

import inputparse 
gender = inputparse.get_input(prompt='Are you male or female?', type=str, possible_input=['male', 'female']) 

,並會照顧自動檢查的等?

+0

鑑於你所展示的內容,編寫自己的代碼很容易。你的問題是,是否有一個標準或共同的圖書館來做到這一點? –

+0

你說得對,做起來很簡單,但就像argparse照顧比我自己實現的更多(自動生成--help等),我會認爲這個問題有些可比性 – Hans

回答

1

再次Necromanting ...

請看看click,如果你需要的問題,一個簡單的助手庫。它的主要焦點是命令行選項,但我認爲它非常適合您的用例。

1

我不知道這樣的庫的存在,但你可以寫一個這樣的高階函數:

def check_input(predicate, msg, error_string="Illegal Input"): 
    while True: 
     result = input(msg).strip() 
     if predicate(result): 
      return result 
     print(error_string) 

result = check_input(lambda x: x in ['male', 'female'], 
            'Are you male or female? ') 
print(result) 

輸出:

 
Are you male or female? foo 
Illegal Input 
Are you male or female? bar 
Illegal Input 
Are you male or female? Male 
Illegal Input 
Are you male or female? male 
male 
1

我偶然在此線程找一個類似的圖書館,我對沒有一個這樣的事實感到非常失望,所以我寫了一個。在接下來的幾天裏,我會在這方面做很多工作,因爲我需要更多的功能來滿足我的需求。

pickone