2012-11-21 86 views
0

我有一些函數調用用戶輸入,有時字符串,整型或任何。所以我注意到如果ENTER按下了NO INPUT,我得到一個錯誤。所以我做了一些研究,我想我發現EVAL函數可能是我正在尋找的東西,但後來我又讀到了它的危險。「強制」用戶輸入和檢查正確的輸入類型

因此,這裏是我的問題:

  1. 如何檢查/強制用戶輸入? EX:重複輸入字符串或甚至警告用戶他沒有輸入任何內容?

  2. 如何針對用戶類型檢查正確的輸入類型(int,float,string等)而不讓我的腳本返回錯誤?

我感謝您的反饋,

乾杯

+0

結合異常處理和循環...我認爲'eval'根本無法幫到你。 –

回答

2

對於問題一:進入返回的提示在一個空字符串輸入結果時,按下(您使用的輸入()在你的腳本?)。顯然,空字符串不是您的函數的有效輸入。就我所知,無論你輸入什麼,你最終都會得到一個由input()返回的字符串。要檢查是否一個字符串是空的,重複提示,您可以嘗試:

while True: 
    answer = input('Enter something: ') 
    if answer: break 

而對於問題2:檢查提供的參數的類型,一般的Python的方式是嘗試處理它/ except和不明確檢查每個有效/無效類型。此外,在這種情況下,你必須從字符串做明確的手動轉換,所以你只檢查字符串的內容,不處理其他類型(至少現在還沒有)。因爲比,你可能會感興趣的字符串方法或重新(正則表達式)模塊檢查是否存在(或不)某些特定的子字符串。

re module for python3.3string methods for python3.3 爲Python的其他版本,只需在頁面的頂部在菜單中選擇一個適當的值。

+0

謝謝夥伴,我尋找異常處理程序等,得到我想要的,好建議!至於關於「強制」用戶輸入的第一點,你的腳本就像一個魅力。但請你能把它翻譯成英文嗎?如果回答:break表示類似於如果有回答break loop的輸入,對嗎?但確實打破了(:)或旁邊可以像往常一樣?不是沒有輸入解釋爲輸入(空白字符串),在這種情況下,它爲什麼工作? – Newbie

+0

@Newbie中斷可能在標準的縮進代碼塊中,它只是在非常簡單的情況下被編碼(就像我在上面的回答中那樣),但是就我所知,常見的做法是將它放在一行中。 '如果回答:'檢查'answer'是否爲真 - 對於Python對象真相測試,請參閱http://docs.python.org/3.2/library/stdtypes.html - 非空字符串爲'True',空爲'假',所以如果字符串非空,它會打破循環。你可以使用'if len(answer)!= 0:',但在大多數情況下,在Python中不需要這樣做。 –

+0

@Newbie以及在這種情況下對於'break'的縮進 - iirc,你可以在與循環頭部相同的行中只有非複合語句。 'True:print('something')',而不是同一行中嵌套的if或者for。(沒有合適的縮進塊)。 –

0

要回答您的問題的第二部分,您可以使用python中的isinstance()函數來檢查變量是否屬於某種類型。

+0

謝謝,不是我正在尋找,但仍然很好知道。這個解決方案的問題是,我仍然必須明確地將輸入轉換爲int,float等,這意味着我會得到和錯誤,如果我嘗試將str轉換爲int,例如。因此我仍然需要使用上面答案中提到的異常處理程序。我的意思是,我嘗試了幾個小時使用isinstance來實現類似的結果,如嘗試/除非沒有好結果,嘆!再次感謝,仍然善於豐富知識。 – Newbie