Schreiben Sie ein Programm, das die Syntaxfehlermeldung des Compilers oder Interpreters ausgibt. Die Fehlermeldung sollte irreführend sein, so dass die Codewartenden Tage brauchen, um herauszufinden, dass der Fehler gefälscht wurde. Das bedeutet, Sie sollten dies verschleiern (und Ihre Absichten verbergen). Außerdem muss der Fehler so genau wie möglich sein und sollte korrekt auf den Code verweisen.
Bei kompatiblen Sprachen wird davon ausgegangen, dass Ihr Code-Betreuer compile program.p && ./program
das Programm in der Befehlszeile kompiliert UND ausführt. Dies bedeutet, dass er nicht unterscheiden kann, ob die Ausgabe vom Compiler oder vom Programm selbst stammt. Nehmen Sie außerdem an, dass Ihr Code-Betreuer Syntaxfehlermeldungen aktiviert.
Als Referenz ist hier ein Beispiel, das ich gemacht habe: https://gist.github.com/359604
Der DATA
Abschnitt codiert die Zeichenfolge der Fehlermeldung und den Hash%abcdef
ist die Decodiertabelle. Der Fehler gab Verweise auf die Backslashes aus, wodurch ein Code-Betreuer versucht, die Backslashes zu zählen.
Die Beiträge werden nach folgenden Kriterien bewertet:
- Code hat eine täuschend offensichtliche Absicht
/6
- Der Code gibt den Fehler korrekt wieder
/16
(Ihr Punkt beginnt mit 16 und wird für jede Ungenauigkeit durch die entsprechenden Faktoren dividiert).- Richtige Großschreibung: 4
- Richtige Zeilennummer und Spaltennummer: 4
- Richtiger Wortlaut: 2 für jedes falsche Wort
- Die Zeilennummer, auf die verwiesen wird, führt den Code-Betreuer in die Irre
/3
Beispielsweise,
./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
Erhält 8 (16/2) für die Richtigkeit, wenn "Unerwartet" vor "Token" fehlt, wird ein normaler Python-Interpreter angezeigt
./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
Wenn Ihr Punkt "Code reproduziert Fehler korrekt" unter 1 liegt, wird Ihre Eingabe disqualifiziert.
Im Falle eines Unentschieden werde ich zusätzliche Bewertungsfaktoren aufstellen.
quelle
Antworten:
Python
Dies ist ein Programm, das einen Dateinamen in die Befehlszeile aufnehmen, die erste Zeile darin auswerten und das Ergebnis drucken soll. Es hat 2 Bugs. Der Hauptfehler ist, dass es
sys.argv[1]
nicht verwenden solltesys.argv[0]
, so dass es das Programm selbst evaluiert, nicht den Inhalt der Datei, die durch das erste Argument benannt wurde. Der zweite Fehler ist, dass das Argument,print_exc
dass es nur den tiefsten Frame auf dem Stapel ausgeben soll, die Tatsache verbirgt, dass der Fehler in der aufgetreten isteval
. Als Ergebnis erhalten Sie folgende Fehlermeldung:Dies sieht sehr danach aus, als hätte die erste Zeile des Programms einen Syntaxfehler. Es ist nicht ganz richtig, wie die Datei ist
<string>
,fake_error.py
aber ansonsten ist es nicht von dem Fall zu unterscheiden, in dem Sie beispielsweiseimport
falsch schreiben.Beide Fehler sind insofern etwas "hintergangen", als sie versehentlich auftreten könnten.
quelle
raise
in Python 2, aber in IDLE, der Standard-IDE von Python, verursacht einen internen Fehler beim Drucken von Kauderwelsch über Warteschlangen.Traceback (most recent call last): ** IDLE Internal Exception: File "2.7/lib/python2.7/idlelib/run.py", line 325, in runcode exec code in self.locals File "2.7/lib/python2.7/idlelib/run.py", line 111, in main seq, request = rpc.request_queue.get(block=True, timeout=0.05) File "2.7/lib/python2.7/Queue.py", line 176, in get raise Empty
Erinnert mich an einen Scherz.
quelle
Gehirn ***
Ich kann den Compiler, den ich zuvor verwendet habe, nicht finden, aber ich versichere Ihnen, dass dies die genaue Fehlermeldung ist.
quelle
:)
Java
Ich wusste nicht, ob Sie tatsächlich eine unbehandelte Ausnahme (wie in diesem Beispiel) auslösen oder eine Fehlermeldung simulieren wollten. Wenn dies der Fall ist, sollte dies funktionieren:
C
(Dies setzt voraus, dass
stdio.h
#included ist)quelle
Game Maker-Sprache
quelle
ACTIONSCRIPT 3
quelle