Error de captura en la validación de entrada

Necesito agregar un mensaje de error si el usuario ingresa una cadena en lugar de un entero en mi selección de menú, y también las cantidades que el usuario ingresa como datos. Probé este código pero no funciona.

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

¿Qué estoy haciendo mal?

TypeError generaría si el parámetro to int() fuera del tipo incorrecto.

Suponiendo que está utilizando Python3, el valor de retorno de input() siempre será de tipo str

ValueError se ValueError si el tipo es correcto, pero el contenido no se puede convertir a un int .

Para preguntar una y otra vez, debes usar un bucle while

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

Si desea mantener la cuenta de los errores, use itertools.count y un bucle for

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

Esto se debe a que pasar una cadena no válida (no un número) a int() generará un ValueError , y no TypeError . Aunque estás cerca.

Solo cámbiala y debería funcionar muy bien.

 except ValueError: print('Error!') 

Si quieres hacer algo con la variable newamount , te sugiero que lo hagas en el bloque try :

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

¡Espero que esto ayude!

Creo que es mejor usar raw_input en estos casos donde la entrada se debe evaluar manualmente. Dice así…

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