Écrivez un programme qui affiche le message d'erreur de syntaxe du compilateur ou de l'interpréteur. Le message d'erreur doit être trompeur afin que les responsables du code mettent des jours à découvrir que l'erreur a été truquée, cela signifie que vous devez masquer (et masquer votre intention). En outre, l'erreur doit être aussi exacte que possible et doit faire référence au code correctement.
Pour les langages conformes, supposez que votre responsable de code fera compile program.p && ./program
sur la ligne de commande pour compiler ET exécuter le programme, cela signifie qu'il ne peut pas distinguer si la sortie provient du compilateur ou du programme lui-même. Supposez également que votre responsable de code active les messages d'erreur de syntaxe.
Pour référence, voici un exemple que j'ai fait: https://gist.github.com/359604
La DATA
section code la chaîne de message d'erreur et le hachage %abcdef
est la table de décodage. L'erreur a imprimé des références aux barres obliques inverses, ce qui oblige un responsable du code à essayer de compter les barres obliques inverses.
Les inscriptions seront classées par:
- Le code a une intention trompeuse évidente
/6
- Le code reproduit correctement l'erreur
/16
(votre point commence par 16, et divisez par les facteurs correspondants pour chaque inexactitude)- Capitalisation correcte: 4
- Numéro de ligne et numéro de colonne corrects: 4
- Libellé correct: 2 pour chaque mot incorrect
- Le numéro de ligne référencé induit en erreur le responsable du code
/3
Par exemple,
./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
obtient 8 (16/2) sur l'exactitude pour "inattendu" manquant avant "jeton", un interpréteur Python normal affiche
./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
Si votre point "code reproduit l'erreur correctement" est inférieur à 1, votre inscription est disqualifiée.
En cas d'égalité, je mettrai en place des facteurs de classement supplémentaires.
la source
Réponses:
Python
Il s'agit d'un programme qui doit prendre un nom de fichier sur la ligne de commande, évaluer la première ligne et imprimer le résultat. Il a 2 bugs. Le bogue majeur est qu'il ne doit pas utiliser
sys.argv[1]
,sys.argv[0]
donc il finit par évaluer le programme lui-même, pas le contenu du fichier nommé par le premier argument. Le deuxième bogue est que l'argument pourprint_exc
qu'il imprime uniquement le cadre le plus profond de la pile, cachant le fait que l'erreur s'est produite à l'intérieur dueval
. En conséquence, vous obtenez une erreur comme celle-ci:Cela ressemble beaucoup à la première ligne du programme a une erreur de syntaxe. Ce n'est pas tout à fait correct car le fichier l'est
<string>
,fake_error.py
mais sinon, il est impossible de le distinguer du cas où, par exemple, vous vousimport
trompez.Les deux erreurs sont quelque peu "sournoises" en ce qu'elles peuvent être accidentelles.
la source
raise
en Python 2, mais en IDLE, l'EDI par défaut de python, provoque une erreur interne d'impression de charabia sur les files d'attente.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
Me rappelle une blague pratique.
la source
BrainF ***
Je ne trouve pas le compilateur particulier que j'ai utilisé auparavant, mais je vous assure que c'est le message d'erreur exact.
la source
:)
Java
Je ne savais pas si vous vouliez réellement lancer une exception non gérée (comme dans cet exemple) ou simuler un message d'erreur. Si tel est le cas, cela devrait fonctionner:
C
(cela suppose que
stdio.h
c'est #inclus)la source
Langue de Game Maker
la source
ACTIONSCRIPT 3
la source