sublime portable mac instalar full español descargar cost como python python-3.x sublimetext2 eof

portable - Python 3: EOF al leer una línea(Sublime Text 2 está enojado)



sublime text 3 ubuntu (5)

while True: reply = input(''Enter text'') if reply == ''stop'': break print(reply.upper())

El resultado fue:

Enter text:Traceback (most recent call last): File "C:/PythonProjects/5.py", line 2, in <module> reply = input(''Enter text:'') EOFError: EOF when reading a line [Finished in 0.2s with exit code 1]

Está solo en Sublime Text 2. Intenté IDLE, intenté con la línea de comandos, todo es perfecto. ¿Por qué debería Subleme gritarme?

Por cierto, quizás también podrías explicarme qué puede significar EOF en esa situación. Por supuesto, he leído en la documentación que si se lee el EOF de la entrada, se genera el error apropiado. Me gustaría modelar esta situación. ¿La entrada es solo sobre el teclado? En caso afirmativo, ¿qué combinación de teclas debo ingresar para obtener EOF?

Gracias de antemano.


EOF es una señal especial fuera de banda que significa el final de la entrada. No es un personaje (aunque en los viejos días de DOS, 0x1B actuó como EOF), sino más bien una señal del sistema operativo de que la entrada ha finalizado.

En Windows, puede "ingresar" un EOF presionando Ctrl+Z en el símbolo del sistema. Esto indica al terminal que cierre el flujo de entrada, que presenta un EOF al programa en ejecución. Tenga en cuenta que en otros sistemas operativos o emuladores de terminal, EOF generalmente se señala con Ctrl+D

En cuanto a su problema con Sublime Text 2, parece que stdin no está conectado al terminal cuando se ejecuta un programa dentro de Sublime, por lo que los programas se inician conectados a un archivo vacío (probablemente nul o /dev/null ). Consulte también el error Python 3.1 y Sublime Text 2 .


Parece que a partir de ahora, la única solución es seguir instalando SublimeREPL.

Para extender la respuesta de Raghav, puede ser bastante molesto tener que ir al comando Herramientas-> SublimeREPL-> Python-> Ejecutar cada vez que desee ejecutar un script con la entrada, así que ideé un enlace de tecla rápido que puede ser útil :

Para habilitarlo, vaya a Preferencias-> Vinculaciones de teclas - Usuario, y cópielo allí:

[ {"keys":["ctrl+r"] , "caption": "SublimeREPL: Python - RUN current file", "command": "run_existing_window_command", "args": { "id": "repl_python_run", "file": "config/Python/Main.sublime-menu" } }, ]

Naturalmente, solo tendría que cambiar el argumento de "teclas" para cambiar el atajo a lo que desee.


Yo tuve el mismo problema. El problema con la consola predeterminada de Sublime Text es que no admite entrada.

Para resolverlo, debe instalar un paquete llamado SublimeREPL. SublimeREPL proporciona un intérprete de Python que acepta entradas.

Hay un article que explica la solución en detalle.

Página de GitHub para SublimeREPL


help(input) muestra qué atajos de teclado producen EOF, a saber, Unix: Ctrl-D , Windows: Ctrl-Z + Retorno :

entrada ([prompt]) -> string

Lee una cadena de entrada estándar. La nueva línea final se elimina. Si el usuario golpea EOF (Unix: Ctl-D, Windows: Ctl-Z + Retorno), levanta EOFError. En Unix, GNU readline se usa si está habilitado. La cadena de aviso, si se da, se imprime sin una línea nueva final antes de leer.

Puedes reproducirlo usando un archivo vacío:

$ touch empty $ python3 -c "input()" < empty Traceback (most recent call last): File "<string>", line 1, in <module> EOFError: EOF when reading a line

Puede usar /dev/null o nul (Windows) como un archivo vacío para leer. os.devnull muestra el nombre que usa su sistema operativo:

$ python3 -c "import os; print(os.devnull)" /dev/null

Nota: input() acepta felizmente la entrada de un archivo / tubería. No necesita stdin para conectarse a la terminal:

$ echo abc | python3 -c "print(input()[::-1])" cba

O maneja EOFError en tu código:

try: reply = input(''Enter text'') except EOFError: break

O configure su editor para proporcionar una entrada no vacía cuando ejecute el script, por ejemplo, utilizando una línea de comando personalizada si lo permite: python3 "%f" < input_file


try: value = raw_input() do_stuff(value) # next line was found except (EOFError): break #end of file reached

Este parece ser el uso correcto de raw_input cuando se trata del final de la secuencia de entrada desde la entrada canalizada. [Referir esta publicación] [1]