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.

Git Commit-Msg en Python. Obteniendo un error EOF.

Estoy creando un commit-msg para .git/hooks/commit-msg y estoy recibiendo un Error EOF al preguntar al usuario por input() en esta línea

response = input("¿Estás seguro de que quieres hacer commit? [y/N]: ")

¡Si alguien pudiera ayudarme a averiguar qué está mal!

Registro de salida: https://i.stack.imgur.com/ypbPW.png

#!/usr/bin/python

import sys
import re


def main():
    # abrir archivo para leer cada línea
    with open(sys.argv[1], "r") as fp:
        lines = fp.readlines()

        for idx, line in enumerate(lines):

            if line.strip() == "# ------------------------ >8 ------------------------":
                break

            if line[0] == "#":
                continue

    # mensaje de advertencia
    if (re.search('#[0-9]+$', line) is None):
        print("Advertencia: agregar el número de problema relacionado con este commit.")
        # pedir al usuario que confirme hasta que se reciba una respuesta válida
        try:
            while True:
                response = input("¿Estás seguro de que quieres hacer commit? [y/N]: ")
                if (response == 'y'):
                    sys.exit(0)
                elif (response == 'N'):
                    sys.exit(1)
        except EOFError as e:
            print(e)

    # commit exitoso
    print("¡Éxito: commit perfecto!")
    sys.exit(0)    

if __name__ == "__main__":
    main()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que se está produciendo un error EOFError porque el usuario no proporciona ninguna entrada antes de alcanzar el final del archivo. Una manera de solucionar este problema es capturar la excepción EOFError y proporcionar una respuesta predeterminada en caso de que el usuario no proporcione ninguna entrada. Esto se puede hacer modificando la línea de entrada a:

    response = input("¿Estás seguro de que quieres confirmar? [y/N]: ") or 'N'
    

    Esta línea establecerá la variable response en 'N' si el usuario no proporciona ninguna entrada. Alternativamente, se puede utilizar un bloque try-except para capturar la excepción y proporcionar una respuesta predeterminada, como sigue:

    try:
        response = input("¿Estás seguro de que quieres confirmar? [y/N]: ")
    except EOFError:
        response = 'N'
    

    Este código establecerá la variable response en 'N' en caso de que se produzca la excepción EOFError.

Comments are closed.