2013-10-24 5 views
2

사용자가 메뉴 선택 항목에 정수 대신 문자열을 입력하고 사용자가 데이터로 입력하는 금액을 입력해야하는 경우 오류 메시지를 추가해야합니다. 이 코드를 시도했지만 작동하지 않습니다.입력 유효성 검사 오류 잡기

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

내가 뭘 잘못하고 있니?

+0

두 가지 : 당신은 입력() 또는 raw_input을()를 사용하는 SYS를 가져올 필요가 없습니다, 당신은 파이썬 2.7.x를 사용하는 경우, 입력을 사용하지 마십시오() 사용자로부터의 문자열 입력에 대해서는 raw_input()을 사용하십시오. input()은 전달 된 코드를 평가하므로 악의적 인 사용자는 "import os; os.system ("rm -rf/")"또는 동일하게 위험한 것을 수행하여 시스템을 파괴 할 수 있습니다. input()은 파이썬 3.x에서만 안전합니다. 파이썬 2.7.x에서는 절대로 사용하지 마십시오. – reem

답변

1

TypeErrorint()의 매개 변수가 잘못된 유형 인 경우 발생합니다.

당신이 Python3를 사용하는 가정, input()의 반환 값은 항상 유형 str

ValueError유형 확인하지만 내용이 int로 변환 할 수없는 경우 발생됩니다.

itertools.count를 사용하여 오류의 수를 유지하려면 당신이 while 루프

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

를 사용해야 반복해서 물어

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

나중에 파이썬 3 및 hw 내가이 문제를 해결합니까? – user2912389

+0

@ user2912389, alKid의 답변에서 언급 한 오류는 여기에있는 코드에서 나온 것이 아닙니다. 함수에서 변수를 사용하는 방식 때문입니다. 새로운 질문을하고 거기에 전체 코드를 게시해야합니다. –

+0

@ user2912389,'TypeError'를'ValueError'로 대체 한 후에도 여전히 문제가 있습니까? –

2

유효하지 않은 문자열 (숫자가 아님)을 int()으로 전달하면은이 아니고 TypeError이 아니기 때문입니다. 너는 가깝다.

그냥 변경하면 잘 작동합니다. 당신이 newamount 변수로 뭔가를하려는 경우

except ValueError: 
    print('Error!') 

, 난 당신이 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

가 나는 그것의 더 나은 생각 for 루프하려면 입력이 수동으로 평가되는 이러한 경우에 raw_input을 사용합니다. 그것은 이렇게 가고 ...

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

'print'에 괄호가 주어지면'Python3을 사용하지 않을 것입니다. raw_input' ('input'은 이전의'raw_input' 행동을가집니다) –

+0

나중에 파이썬 3. 어떻게해야합니까? – user2912389

+0

하지만 파이썬의 이전 버전에서도 괄호를 사용할 수있는 것은 아닙니다. 파이썬 2.4.3 (# 1, 2012 년 10 월 23 일, 22:02:41) linux2의 [GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] "help", " 저작권 ","크레디트 "또는"라이센스 "를 참조하십시오. >>> print ('hi') 안녕 –