2013-09-25 4 views
1

Я получаю эту ошибку «ValueError: недействительный литерал для int() с базой 10:« g », когда я ввожу либо букву, либо десятичную цифру в поле ввода. В поле ввода принимаются только целые числа, и я хотел бы знать, можно ли дать сообщение о том, что «вы должны ввести число» или что-то подобное, когда они пытаются ввести букву. Heres некоторые больше моего кода:Добавление писем в поле ввода?

def checkAnswer(): 
    mainAnswer = entry1.get() 

    if len(mainAnswer) == 0: 
     messagebox.showwarning(message='-You must enter some numbers first!') 
     return 
    if int(mainAnswer) != answer: 
     messagebox.showwarning(message='Sorry...the correct answer is: ' + str(answer)) 
    else: 
     messagebox.showinfo(message='Correct!') 
+0

Это питон, не так ли? –

ответ

3

Исключение вы получаете, когда вы пытаетесь сделать int(mainAnswer) когда mainAnswer не является числом. Один из способов решить эту проблему, чтобы сделать это:

try: 
    int(mainAnswer) 
except ValueError: 
    messagebox.showwarning(message="You must enter a number") 
    return 

# the rest of your code 
0
try: 
    int_answer = int(mainAnswer) 
except ValueError: 
    int_answer = None 
if int_answer is None: 
    ... # Show the error. 
0

EDIT: Я думал об этом неправильно. Это никогда не будет работать, потому что пользователь не будет напрямую вводить int.

Я бы просто проверил тип. Кроме того, если вы используете elif, вам не нужно это пустое возвращение. Вам также может потребоваться отменить проверку типа и проверку len, но я не думаю, что это важно для этого ответа.

def checkAnswer(): 
    mainAnswer = entry1.get() 

    if type(mainAnswer) != int: 
     messagebox.showwarning(message='You must enter a number.') 
    elif len(mainAnswer) == 0: 
     messagebox.showwarning(message='-You must enter some numbers first!')  
    elif int(mainAnswer) != answer: 
     messagebox.showwarning(message='Sorry...the correct answer is: ' + str(answer)) 
    else: 
     messagebox.showinfo(message='Correct!') 
+0

Если 'mainAnswer' был изначально' int', OP не получил бы исключения, о котором он упомянул. –

+0

Точно цель проверки. –

+0

Я имел в виду, что эта проверка будет * никогда * проходить, потому что хотя пользователь ввел '123', это будет' строка', а не 'int'. –

Смежные вопросы