ValueError:int()以10为底的无效文字:“一个”

时间:2019-11-09 18:17:17

标签: python valueerror

def admin():

    def admin_try():
        print ("1) Ver lista de productos.",'\n')
        print ("2) Agregar un producto.",'\n')
        print ("3) Modificar un producto (Precio).",'\n')
        print ("4) Eliminar un producto.",'\n')
        print ("5) Pedidos agendados.",'\n')
        print ("6) Salir.",'\n')
        global opcion
        opcion = int(input("Indique una opción valida: "))

    while True:
        try:
            admin_try()
        except (ValueError):
            print ("La instrución debe ser numerica.")
        admin_try()

admin()  # I get an error

执行此代码时出现错误,我想尝试一下循环, 并且在执行代码时收到此错误。我想要的是,每当用户提出错误信息时,该函数始终会执行。

  

Traceback (most recent call last): File "g:/proyecto/try.py", line 15, in admin admin_try() File "g:/proyecto/try.py", line 11, in admin_try opcion = int(input("Indique una opción valida: ")) ValueError: invalid literal for int() with base 10: 'uno' During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "g:/proyecto/try.py", line 20, in <module> admin() File "g:/proyecto/try.py", line 18, in admin admin_try() File "g:/proyecto/try.py", line 11, in admin_try opcion = int(input("Indique una opción valida: ")) ValueError: invalid literal for int() with base 10: 'one'

1 个答案:

答案 0 :(得分:0)

请勿使用try-except

  • 使用try-except的需要来自将输入转换为int
    • 如果您尝试将非数字输入转换为int,则会出现ValueError exception
    • 可以执行此代码而无需转换为int
  • 使用membership operator, in确定输入是否在接受的输入的list中。如果输入不在列表中,将再次调用admin()
  • 不需要将opcion设置为全局变量。
    • 如果需要admin()以外的地方,请使用return
    • 如果在opcion函数之外需要int作为admin(),则使用return int(opcion)
def admin():
    print ("1) Ver lista de productos.",'\n')
    print ("2) Agregar un producto.",'\n')
    print ("3) Modificar un producto (Precio).",'\n')
    print ("4) Eliminar un producto.",'\n')
    print ("5) Pedidos agendados.",'\n')
    print ("6) Salir.",'\n')
    opcion = input("Indique una opción valida: ")

    while True:
        if opcion in ['1', '2', '3', '4', '5', '6']:
            return opcion  # return the value if it's needed outside of admin()
            break  # stops the loop because a correct option has been selected
        else:
            print ("La instrución debe ser numerica.\n")
            admin()

admin()