Typer Python: Recibo un error “Error: Se obtuvo un argumento adicional inesperado (valorcadena)” al pasar una cadena a mi función.
Así que estaba intentando hacer una aplicación de lista de tareas en la línea de comandos (CLI) en Python utilizando Typer y quiero que muestre un mensaje cuando no se le proporciona ninguna tarea. Así que establecí “task” con un valor predeterminado de None.
Pero cuando paso un valor a “task” como por ejemplo “driving”, obtengo el error “Got an unexpected extra argument”.
¿Algún consejo sobre cómo solucionar este error o quizás otra solución para mostrar un error cuando no se pasa ningún argumento a la función?
Aquí está mi código:
@app.command()
def add(priority:int, task="None"):
if task=="None":
print("Error: Missing tasks string. Nothing added!")
else:
dict1={}
dict1.update({task:priority})
filesize1= os.stat('output.pickle').st_size
if filesize1==0:
pf=open("output.pickle","wb")
else:
pf=open("output.pickle","ab")
pickle.dump(dict1, pf)
pf.close()
pf=open("output.pickle","rb")
dict2={}
while 1:
try:
dict2.update(pickle.load(pf))
except EOFError:
break
pf.close()
dict3={k:v for k,v in sorted(dict2.items(),key= lambda v:v[1])}
print('Added task: "'+task+'" with priority '+str(priority))
file1=open("ls.txt","w+")
i=1
for key,value in dict3.items():
file1.write(str(i)+". "+key+ " ["+str(value)+"]"+"\n")
i=i+1
davy.ai
El problema con el código es que el valor predeterminado para el parámetro de tarea está configurado como la cadena “None” en lugar de None. Esto hace que el analizador de argumentos asuma que “None” es un valor real pasado para el parámetro de tarea, lo que resulta en el error “Se obtuvo un argumento extra inesperado” cuando se proporciona un nombre de tarea.
Para solucionar este error, cambie el valor predeterminado para el parámetro de tarea a None:
De esta manera, el analizador de argumentos reconocerá correctamente que el parámetro de tarea tiene un valor predeterminado de None y no mostrará un error cuando se proporcione un nombre de tarea.
Otra forma de verificar si se proporciona un nombre de tarea es utilizar un parámetro requerido para el argumento de tarea y manejar el mensaje de error en el callback:
De esta manera, si el usuario no proporciona un nombre de tarea, Typer mostrará automáticamente el mensaje de error especificado en el callback.