Chciałbym zobaczyć, kto może doprowadzić do katastrofy Pythona przy najbardziej kreatywnym kodzie. Oznacza to, że kiedy program się uruchomi, na przykład Windows przejmie kontrolę i wyświetli komunikat „IDLE przestał działać”, lub Linux zrobi wszystko, co Linux zrobi, gdy program się zawiesi.
Zasady:
Trzeba to zrobić w Pythonie 2.7 lub nowszym (więc stare błędy nie są wykorzystywane, które zostały naprawione w przyszłych wersjach Pythona).
Definicja „awarii” to „IDLE lub Python zamykają się w niezamierzony sposób”. Nie oznacza to „zatrzymaj IDLE lub Python i daj ślad”. Oznacza to również, że exit, sys.quit, abort itp. Nie są prawidłowymi odpowiedziami. Na przykład nie zostanie to zaakceptowane:
import sys try: print c # Crashes Here, as c is not defined. except NameError, SyntaxError: print "Oh No!" sys.exit()
Sprawianie, że Python przestaje odpowiadać, nie jest akceptowane.
Kod musi zostać wyjaśniony na temat tego, co robi, aby zawiesić. Link do raportu o błędzie jest w porządku.
Najpopularniejsza odpowiedź po 10 dniach wygrywa! Zaczynać!!
EDYCJA: Czy mogę wyjaśnić, że celem nie jest spowodowanie, aby Python po prostu przestał uruchamiać program za pomocą funkcji śledzenia. Celem jest, aby Python całkowicie przestał działać lub przestał działać. Oznacza to, że jeśli to zadanie zostanie pomyślnie wykonane, system Windows to poda (nie zawieszam tutaj programu Word, to tylko przykład tego, co powinno się stać dla innego programu):
albo to:
źródło
prnt
pytanie jest celowe.Odpowiedzi:
Powinien to być konkurs golfowy;) - Myślę, że kreatywność to stwierdzenie, które kod: „Po prostu nie wiem, co się tutaj dzieje…”
Skopiuj i wklej następujący znak w IDLE uruchomionym w systemie Windows:
Awaria ma coś wspólnego z postacią kodowaną przez UTF-16 przez Windows i nieudaną konwersją na postać UTF-8 przez IDLE ...
Edycja: błąd python # 13153
źródło
𐒢
, zanim będzie można go uruchomić.ctypes
nadużycie:Spowoduje to przekazanie 1 na adres i wyrejestrowanie go. W każdym zdrowym systemie (tj. W którym 0x00000001 nie jest adresem zamapowanym), spowoduje to natychmiastową awarię.
źródło
ctypes
w Windowsie w inny sposób, ale być może nie tak mało znaków.60
Nie mój własny pomysł. Skopiowane z Pythona Wiki tutaj .
Powoduje to nieskończoną rekurencję i nie jest zatrzymywane przez interpretera, ponieważ zmieniliśmy limit rekurencji.
źródło
signal
nadużycie (tylko inne niż Windows):W większości systemów (w których SIGILL = 4) spowoduje to zabicie Pythona z błędem „niedozwolonej instrukcji”.
Lub możesz zabić program za pomocą budzika zabójcy :
Po chwili Python umiera z tajemniczą wiadomością „Budzik”.
źródło
W Python 3.3:
W kodzie Python 2.7 obiekty są nieco inne:
Tak, możesz przekazać dowolne stare śmieci do interpretera kodu bajtów i wykonuje to ( problem w języku Python # 17187 ).
źródło
exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')
.__code__
.Iteratory rekurencyjne używają stosu C, a nie stosu Python ( problem nr 14010 i problem nr 14507 ):
źródło
Jednym z łatwych sposobów na zawieszenie interpretera jest oszukanie go w celu cofnięcia przydziału Brak:
Jako bonus, oto sprytny sposób na segfault Python 2:
To, co dokładnie to robi, pozostawia czytelnikowi ćwiczenie.
źródło
Ktoś pomyślał, że może zapobiec tworzeniu nowych
FlagsType
obiektów przez ustawienieFlagsType.tp_new = NULL
, ale zapomniał usunąć metodę ( problem # 13204 ):(
sys.version_info
ma ten sam błąd.)źródło
Zastosowanie
alloca
wctypes
module ( nr 13096 ):źródło
Jednym możliwym sposobem, który powoduje awarię mojego Pythona
MemoryError
:źródło
MemoryError
. Musi zostać zamknięty przez system operacyjny.