Как выдать ошибку вместо системной ошибки

Привет, так что у меня есть мой гадатель чисел в python3. Но я хочу выдать ошибку, если пользователь печатает буквы вместо цифр. Когда я набираю букву, она говорит

Traceback (most recent call last):
  File "nummerlol.py", line 14, in <module>
    guess = int(guess)
ValueError: invalid literal for int() with base 10:"

Есть ли способ изменить эту ошибку? Спасибо

import time
import random 
from secrets import randbelow
guesscount = 0
print("Hey whats your name")
name = input()
number = randbelow(20)
print("The Number is between 1 & 20")
while guesscount < 6:
    print("Guess.")
    guess = input()
    guess = int(guess)
    guesscount = guesscount + 1
    if guess < number:
        print("My Number is bigger")
    if guess > number:
        print("My Number is lower")
    if guess == number:
        break
if guess == number :
guesscount = str(guesscount)
print("Nice",name ,".")
print("You needed" ,guesscount ,"Tries")
if guess != number:
    number = str(number)
    print("Bruh,My Number was" ,number)`

2 ответа

Решение

Вы можете использовать цикл try-Кроме. С continue (как показано ниже) пользователь может продолжать догадываться. Вы также можете поставить собственное исключение вместо print а также continue если вы хотите, чтобы скрипт ломался с более информативным сообщением.

import time
import random 
from secrets import randbelow
guesscount = 0
print("Hey whats your name")
name = input()
number = randbelow(20)
print("The Number is between 1 & 20")
while guesscount < 6:
    print("Guess.")
    guess = input()
    try:
        guess = int(guess)
    except:
        print("That is not a number")
        continue
    guesscount = guesscount + 1
    if guess < number:
        print("My Number is bigger")
    if guess > number:
        print("My Number is lower")
    if guess == number:
        break
if guess == number :
    guesscount = str(guesscount)
print("Nice",name ,".")
print("You needed" ,guesscount ,"Tries")
if guess != number:
    number = str(number)
    print("Bruh,My Number was" ,number)

Подобный ваш вопрос уже существует, но я все равно отвечу на ваш вопрос.

Как вы уже знаете, причина, по которой вы получаете ответ трассировки, заключается в том, что вы пытаетесь преобразовать нецелое число в целое, когда вы вызываете int(guess), Вы можете поймать это исключение, используя блок try / исключением. Например, вы можете заменить ошибочную строку кода следующим:

while True:
  try:
    guess = int(guess)
    break
  except ValueError:
    print("You must enter a valid number.")

Этот код заставит программу требовать ввода от пользователя, пока этот ввод не будет действительным. Посмотрите эту Python3 документацию по ошибкам и исключениям для получения дополнительной информации.

Другие вопросы по тегам