Ich würde gerne sehen, wer Python mit dem kreativsten Code zum Absturz bringen kann. Das heißt, wenn das Programm ausgeführt wird, übernimmt zum Beispiel Windows und zeigt so etwas wie "IDLE hat aufgehört zu funktionieren" an, oder Linux macht das, was Linux tut, wenn ein Programm abstürzt.
Regeln:
Dies muss in Python 2.7 oder höher durchgeführt werden (alte Fehler, die in zukünftigen Versionen von Python behoben wurden, werden also nicht ausgenutzt).
Die Definition von "Absturz" lautet "IDLE oder Python unbeabsichtigt beenden". Dies bedeutet nicht "IDLE oder Python anhalten und einen Traceback geben". Dies bedeutet auch, dass exit, sys.quit, abort usw. keine gültigen Antworten sind. Dies wird beispielsweise nicht akzeptiert:
import sys try: print c # Crashes Here, as c is not defined. except NameError, SyntaxError: print "Oh No!" sys.exit()
Es wird nicht akzeptiert, dass Python nicht mehr reagiert.
Der Code muss erklärt werden, was er zum Absturz bringt. Ein Link zu einem Fehlerbericht ist in Ordnung.
Die am besten bewertete Antwort nach 10 Tagen gewinnt! Start!!
EDIT: Darf ich klarstellen, dass es nicht das Ziel ist , Python dazu zu bringen, die Ausführung des Programms mit einem Traceback anzuhalten. Das Ziel ist es, Python zum Absturz zu bringen oder nicht mehr zu funktionieren. Das heißt, wenn diese Aufgabe erfolgreich ausgeführt wird, gibt Windows Folgendes aus (ich stürze hier nicht mit Word ab, es ist nur ein Beispiel dafür, was für ein anderes Programm passieren sollte):
oder dieses:
quelle
prnt
in der Frage ist absichtlich.Antworten:
Sollte ein Code-Golf-Wettbewerb gewesen sein;) - Ich denke, die Kreativität ist die Aussage, die der Code macht: "Ich weiß einfach nicht, was hier passiert ..."
Kopieren Sie das folgende Zeichen in IDLE, das unter Windows ausgeführt wird, und fügen Sie es ein :
Der Absturz hat etwas mit dem Zeichen zu tun, das von Windows als UTF-16 codiert wird, und der nicht erfolgreichen Konvertierung in ein UTF-8-Zeichen durch IDLE ...
Bearbeiten: Python-Fehler # 13153
quelle
𐒢
, bevor Sie es überhaupt ausführen können.ctypes
Missbrauch:Dadurch wird 1 in eine Adresse umgewandelt und dereferenziert. Auf jedem vernünftigen System (dh einem, auf dem 0x00000001 keine zugeordnete Adresse ist) tritt sofort ein Fehler auf.
quelle
ctypes
Windows auf andere Weise zum Absturz bringen können, aber vielleicht nicht mit so wenigen Zeichen.60
Nicht meine eigene Idee. Hier aus dem Python-Wiki kopiert .
Dies verursacht eine unendliche Rekursion und wird vom Interpreter nicht gestoppt, da wir das Rekursionslimit geändert haben.
quelle
signal
Missbrauch (nur Nicht-Windows):Auf den meisten Systemen (auf denen SIGILL = 4 ist) wird Python mit einem "illegalen Befehl" -Fehler beendet.
Oder Sie können das Programm mit dem Killerwecker beenden :
Nach einer Sekunde stirbt Python mit der kryptischen Meldung "Wecker".
quelle
In Python 3.3:
In Python 2.7 unterscheiden sich Codeobjekte geringfügig:
Ja, Sie können jeden alten Müll an den Bytecode-Interpreter übergeben und dieser führt ihn aus ( Python-Ausgabe Nr. 17187 ).
quelle
exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')
.__code__
.Rekursive Iteratoren verwenden den C-Stapel, nicht den Python-Stapel ( Problem # 14010 und Problem # 14507 ):
quelle
Eine einfache Möglichkeit, den Interpreter zum Absturz zu bringen, besteht darin, die Zuordnung von None aufzuheben:
Als Bonus gibt es eine clevere Möglichkeit, Python 2 zu verwerfen:
Was genau dies tut, bleibt dem Leser als Übung überlassen.
quelle
Jemand dachte, sie könnten verhindern, dass neue
FlagsType
Objekte durch Setzen von Einstellungen erstellt werdenFlagsType.tp_new = NULL
, vergaßen jedoch, die Methode zu entfernen ( Problem # 13204 ):(
sys.version_info
hat den gleichen Bug.)quelle
Verwendung von
alloca
inctypes
Modul ( Ausgabe # 13096 ):quelle
Ein möglicher Weg, mit dem mein Python abstürzt
MemoryError
:quelle
MemoryError
. Es muss vom Betriebssystem geschlossen werden.