¿Por qué hay un UnboundLocalError al levantar una excepción y con el ingreso de ()?

pykeegan3306:

Cuando pido entrada y la convierte en un entero usando int (), y cuando se introduce un número entero que maneja como ningún problema. Sin embargo, cuando el usuario introduce un valor incorrecto que me da dos errores a pesar de que he utilizado el manejo de excepciones. Aquí está el código:

def rand_num():
    try:
        print("Welcome to the random number generator!")
        print()
        rand_max = int(input("Enter the maximum number to randomly generate: "))
        print()
        print(f"Your random number is: {random.randint(0, rand_max)}")
    except:
        print(f"Sorry, {rand_max} is not an integer!")

Y aquí están los errores:

Original exception was:
Traceback (most recent call last):
  File "py_cli_calc.py", line 17, in rand_num
    rand_max = int(input("Enter the maximum number to randomly generate: "))
ValueError: invalid literal for int() with base 10: 'str'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "py_cli_calc.py", line 23, in <module>
    rand_num()
  File "py_cli_calc.py", line 21, in rand_num
    print(f"Sorry, {rand_max} is not an integer!")
UnboundLocalError: local variable 'rand_max' referenced before assignment

He intentado colocar diferentes bloques de código en el bloque try, pero estoy tan confundido por qué la excepción no funciona así que pensaba (que se supone que, salvo unos ValueError si el usuario escribe el tipo incorrecto. Además, estoy confundido ¿por qué estoy recibiendo un UnboundLocalError, porque no es mi variable de RAND_MAX accesible por la excepción? he intentado reorganizar el código de diferentes maneras, tales como la colocación de la variable que genera un error de fuera de la prueba, pero todavía recibir una UnboundLocalError! estoy tan confundido acerca de esto, así que por favor me ayude!

kederrac:

si nos fijamos en su anterior error ( ValueError: invalid literal for int() with base 10: 'str'), su rand_maxvariable de que no quede asignado, esto hace que el último error:

UnboundLocalError: local variable 'rand_max' referenced before assignment

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=347551&siteId=1
Recomendado
Clasificación