2013-10-24 73 views
2

如果用戶在我的菜單選項中輸入字符串而不是整數,那麼我需要添加一條錯誤消息,並且還會將用戶輸入爲數據。我試過這段代碼,但它不起作用。輸入驗證時出現捕獲錯誤

import sys 
try: 
    newamount=int(input('Enter the new amount:')) 
except ValueError: 
    print ("error") 

我在做什麼錯?

+0

兩件事情:你不需要導入SYS使用輸入()的raw_input或(),如果你正在使用python 2.7.x,請不要使用輸入()用於來自用戶的字符串輸入,請使用raw_input()。 input()會對傳遞給它的代碼進行評估,所以如果你這樣做了,惡意用戶可能會做一些類似「import os; os.system(」rm -rf /「)」或其他同樣危險的事情,並炸燬你的系統。 input()在python 3.x中是唯一安全的,絕對不要在python 2.7.x中使用它。 – reem

回答

1

TypeError如果int()的參數屬於錯誤類型,則會引發此問題。

假設你正在使用Python3的input()返回值將始終是類型str

ValueError如果是好的,但內容不能被轉換爲int提高。

要問了個遍,如果你想保持錯誤的計數,使用itertools.count你應該使用while循環

while True: 
    try: 
     newamount=int(input('Enter the new amount:')) 
     break 
    except ValueError: 
     print ("error") 

for

from itertools import count 
for c in count(): 
    try: 
     newamount=int(input('Enter the new amount:')) 
     break 
    except ValueError: 
     print ("error", c) 
+0

你的python 3和hw我能解決這個問題嗎? – user2912389

+0

@ user2912389,您在alKid的回答中提到的錯誤不是來自您在此處的代碼。這是因爲你在函數中使用變量的方式。你應該問一個新的問題,並在那裏發佈完整的代碼。 –

+0

@ user2912389,用'ValueError'替換'TypeError'後還有問題嗎? –

2

這是因爲將無效字符串(非數字)傳遞到int()將引發ValueError,而不是TypeError。你雖然接近。

只要改變它,它應該很好。

except ValueError: 
    print('Error!') 

如果你想要做的事與newamount變量,我建議你做的try塊:

try: 
    newamount=int(input('Enter the new amount:')) 
    tempfunction = amount + newamount 

希望這有助於!

+0

tempfunction = amount + newamount#將新金額添加到前一個金額 UnboundLocalError:分配之前引用的本地變量'newamount' >>> – user2912389

+0

此錯誤消息出現 – user2912389

+0

在您的try語句中? – aIKid

1

我認爲其更好在這些情況下要使用raw_input來手動輸入eval。 它是這樣的......

s = raw_input() 
try: 
    choice = int(s) 
except ValueError: 
print ('Wrong Input!') 
+1

鑑於'print'上的parens,他可能使用Python3,它沒有' raw_input'('input'具有舊的'raw_input'行爲) –

+0

ya python 3。我應該做些什麼不同? – user2912389

+0

但是,即使在早期版本的python中,我們也可以使用括號。這裏是證明.. Python 2.4.3(#1,2012年10月23日,22:02:41) [GCC 4.1.2 20080704(Red Hat 4.1.2-54)] on linux2 鍵入「help」,「版權「,」信用「或」許可證「以獲取更多信息。 ('hi') hi –

相關問題