Me gustaría ver quién puede hacer que Python tenga un bloqueo fatal con el código más creativo. Esto significa que cuando se ejecuta el programa, Windows, por ejemplo, se hará cargo y aparecerá algo como "IDLE ha dejado de funcionar", o Linux hará lo que haga Linux cuando un programa se bloquee.
Reglas:
Esto debe hacerse en Python 2.7 o superior (por lo que no se aprovechan los errores antiguos que se han corregido en futuras versiones de Python).
La definición de "bloqueo" es "hacer que IDLE o Python salgan de manera involuntaria". Esto no significa "hacer que IDLE o Python se detengan y dar un rastreo". Esto también significa que exit, sys.quit, abort, etc. no son respuestas válidas. Por ejemplo, esto no será aceptado:
import sys try: print c # Crashes Here, as c is not defined. except NameError, SyntaxError: print "Oh No!" sys.exit()
No se acepta hacer que Python deje de responder.
El código debe explicarse sobre lo que hace para bloquearse. Un enlace a un informe de error está bien.
¡La respuesta más votada después de 10 días gana! ¡¡Empezar!!
EDITAR: ¿ Puedo dejar en claro que el objetivo no es hacer que Python simplemente detenga la ejecución del programa con un rastreo? El objetivo es hacer que Python se bloquee por completo o deje de funcionar. Esto significa que si esta tarea se realiza con éxito, Windows le daría esto (no estoy bloqueando Word aquí, es solo un ejemplo de lo que debería suceder para un programa diferente):
o esto:
fuente
prnt
pregunta es intencional.Respuestas:
Debería haber sido un concurso de golf de código;) - Creo que la creatividad es la declaración que hace el código: "Simplemente no sé qué está pasando aquí ..."
Copie y pegue el siguiente carácter en IDLE que se ejecuta en Windows:
El bloqueo tiene algo que ver con el carácter codificado como UTF-16 por Windows y la conversión fallida a un carácter UTF-8 por IDLE ...
Editar: error de python # 13153
fuente
𐒢
, antes de que incluso pueda ejecutarlo.ctypes
abuso:Esto arroja 1 a una dirección y la desreferencia. En cualquier sistema cuerdo (es decir, uno en el que 0x00000001 no es una dirección asignada), esto fallará instantáneamente.
fuente
ctypes
Windows de alguna otra manera, pero tal vez no con tan pocos caracteres.60 60
No es mi propia idea. Copiado de Python Wiki aquí .
Esto causa una recursión infinita y el intérprete no la detiene porque cambiamos el límite de recursión.
fuente
signal
abuso (no solo para Windows):En la mayoría de los sistemas (en los que SIGILL = 4) esto matará a Python con un error de "instrucción ilegal".
O puedes matar el programa usando el despertador asesino :
Después de un segundo, Python muere con el críptico mensaje "Despertador".
fuente
En Python 3.3:
En Python 2.7, los objetos de código son ligeramente diferentes:
Sí, puede pasar cualquier basura vieja al intérprete de código de bytes y lo ejecuta ( Python número 17187 ).
fuente
exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')
.__code__
.Los iteradores recursivos usan la pila C, no la pila Python ( número 14010 y número 14507 ):
fuente
Una manera fácil de bloquear el intérprete es engañarlo para que desasigne Ninguno:
Como beneficio adicional, aquí hay una forma inteligente de segmentar Python 2:
Lo que hace exactamente esto se deja como ejercicio para el lector.
fuente
Alguien pensó que podría evitar
FlagsType
que se crearan nuevos objetos mediante la configuraciónFlagsType.tp_new = NULL
, pero olvidaron eliminar el método ( problema # 13204 ):(
sys.version_info
tiene el mismo error)fuente
Uso de
alloca
en elctypes
módulo ( número 13096 ):fuente
Una posible forma que bloquea mi Python con
MemoryError
:fuente
MemoryError
. Necesita ser cerrado por el sistema operativo.