¿Por qué print () ya no funciona con python?

de hecho, esto no debería ser un problema porque es bastante básico. Solo quiero imprimir una serie de categorías, pero en una línea y separadas por comas.

for entry in categories: print(entry, ", ", end='') 

Hasta ahora funcionó perfectamente pero ahora no imprime nada. Si elimino la última parte ", end=''" funciona pero no puedo obtener todo en una fila sin una nueva línea para cada categoría.

¿Alguien me puede explicar por qué ya no funciona?

Es casi seguro que experimenta el búfer de salida por línea . El búfer de salida se vacía cada vez que se completa una línea, pero al suprimir la nueva línea nunca se llena el búfer lo suficiente como para forzar una descarga.

Puede forzar una descarga usando flush=True (Python 3.3 and up) o llamando al método flush() en sys.stdout :

 for entry in categories: print(entry, ", ", end='', flush=True) 

Podrías simplificar eso un poco, hacer , el valor end :

 for entry in categories: print(entry, end=', ', flush=True) 

Para eliminar el espacio entre la entrada y la coma.

Alternativamente, imprima las categorías como una cadena usando la coma como el argumento separador de sep :

 print(*categories, sep=', ') 

Verifique que las categories no estén vacías, eso haría que no imprimiera nada. También consideraría cambiar su código para usar el argumento sep (dependiendo de qué tan grandes sean las categories ):

 print(*categories, sep=', ') 

p.ej:

 >>> categories = range(10) >>> print(*categories, sep=', ') 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 

Entonces no tiene que preocuparse por los separadores de lavado / arrastre, etc.

La impresión en el terminal en Python 3 suele ser “línea de búfer”. Es decir, la línea completa solo se imprime en el terminal una vez que se encuentra un carácter de nueva línea.

Para resolver este problema, debe imprimir una nueva línea al final del bucle for, o salir de la salida estándar.

p.ej.

 for entry in categories: print(entry, ", ", end='') print(end='', flush=True) # or just print() if you're not fussed about a newline 

Sin embargo, hay mejores formas de imprimir una matriz. p.ej.

 print(", ".join(str(entry) for entry in categories)) # or print(*categories, sep=", ")