es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo reemplazar en Python los argumentos posicionales faltantes con alguna variable predefinida

Quiero hacer este código ejecutable con uno o dos argumentos posicionales: ({host} y {port}) cuando no se define el número de puerto, se reemplazará con el número predefinido.

Funciona bien si ejecutas el código como >myurl.py localhost "", pero me gustaría ejecutarlo como >myurl.py localhost o >myurl.py localhost 1234.

Cómo evitar el mensaje de error:

TypeError: url() falta 1 argumento posicional requerido: ‘port’

import sys
def url(host, port):
    if port == "":
       sel_port = 5432 # establecer el puerto por defecto
    else:
       sel_port = port # establecer el puerto personalizado
    gen_url = f'http://{host}:{sel_port}/'
    print(gen_url)

url(sys.argv[1],sys.argv[2])
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer que este código sea ejecutable con uno o dos argumentos posicionales, podemos modificar la función url para que acepte un número variable de argumentos utilizando *args. Luego podemos verificar la longitud de args para determinar si se proporcionó un argumento de puerto y establecer el puerto predeterminado si es necesario. Aquí está el código actualizado:

    import sys
    
    def url(host, *args):
        if len(args) == 0:
            sel_port = 5432  # establecer puerto predeterminado
        else:
            sel_port = args[0]  # establecer puerto personalizado
        gen_url = f'http://{host}:{sel_port}/'
        print(gen_url)
    
    if len(sys.argv) == 2:
        url(sys.argv[1])
    elif len(sys.argv) == 3:
        url(sys.argv[1], sys.argv[2])
    else:
        print("Uso: python myurl.py <host> [<port>]")
    

    Ahora, si ejecutamos myurl.py localhost o myurl.py localhost 1234, el código debería funcionar como se espera. Si proporcionamos demasiados argumentos o los argumentos son del tipo incorrecto, el código imprimirá un mensaje de error.

Comments are closed.