¿Cómo puedo evitar que IDLE imprima listas gigantes?
-
03-07-2019 - |
Pregunta
A veces estaré trabajando con, digamos, una lista de miles de elementos en IDLE, y accidentalmente la imprimiré en el shell. Cuando esto sucede, se bloquea o al menos ralentiza de manera muy significativa IDLE. Como puede imaginar, esto es extremadamente inconveniente. ¿Hay alguna manera de hacerlo, en lugar de imprimir todo, solo dame un resultado resumido [1, 2, ...]? Cualquier ayuda sería muy apreciada.
Solución
Como arriba, intente una función de impresión personalizada como:
def my_print(obj):
if hasattr(obj, '__len__') and len(obj) > 100:
print '... omitted object of %s with length %d ...' % (type(obj), len(obj))
else: print obj
Otros consejos
Utilice IPython en su lugar.
Puede usar la función de impresión personalizada.
En Python 3, dado que imprimir es una función, debería poder '' anular '' eso. (No lo tengo instalado, así que no puedo probarlo para asegurarme). Probablemente no se recomiende para aplicaciones reales, pero si solo está probando, estaría bien, supongo.
Sería algo así como:
def myprint(*args):
# write the function as described by other people
print = myprint
La extensión Squeezer para IDLE se escribió para hacer precisamente esto. De la descripción en Pypi:
IDLE puede bloquearse si se imprime una salida muy larga. Para evitar esto, el exprimidor Las extensiones capturan cualquier salida de más de 80 líneas de texto (configurable) y muestra un cuadro rectangular en su lugar:
Squeezer, y muchas otras extensiones IDLE están incluidas en IdleX .