Escriba un programa que imprima el mensaje de error de sintaxis del compilador o intérprete. El mensaje de error debe ser engañoso para que los encargados del mantenimiento del código tarden días en descubrir que el error fue falso, es decir, debe ofuscar (y ocultar su intención). Además, el error debe ser lo más exacto posible y debe hacer referencia al código correctamente.
Para los lenguajes cumplidos, suponga que su mantenedor de código hará compile program.p && ./program
en la línea de comandos para compilar Y ejecutar el programa, eso significa que no puede distinguir si la salida proviene del compilador o del programa en sí. Además, suponga que su mantenedor de código activará los mensajes de error de sintaxis.
Como referencia, aquí hay un ejemplo que hice: https://gist.github.com/359604
La DATA
sección codifica la cadena de mensaje de error, y el hash %abcdef
es la tabla de decodificación. El error imprimió referencias a las barras diagonales inversas, lo que hace que un mantenedor de código intente contar las barras diagonales inversas.
Las entradas serán calificadas por:
- El código tiene una intención engañosamente obvia
/6
- El código reproduce el error correctamente
/16
(su punto comienza con 16 y se divide por los factores correspondientes para cada imprecisión)- Capitalización correcta: 4
- Número correcto de línea y número de columna: 4
- Redacción correcta: 2 por cada palabra incorrecta
- El número de línea al que se hace referencia confunde al responsable del código
/3
Por ejemplo,
./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
obtiene 8 (16/2) en la corrección por faltar "inesperado" antes de "token", muestra un intérprete de Python normal
./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
Si su punto "el código reproduce el error correctamente" es menor a 1, su entrada será descalificada.
En caso de empate, pondré factores de calificación adicionales.
fuente
Respuestas:
Pitón
Este es un programa que debe tomar un nombre de archivo en la línea de comando, evaluar la primera línea e imprimir el resultado. Tiene 2 errores. El error principal es que debe usar
sys.argv[1]
, nosys.argv[0]
, por lo que termina evaluando el programa en sí, no el contenido del archivo nombrado por el primer argumento. El segundo error es que el argumentoprint_exc
hace que imprima solo el cuadro más profundo de la pila, ocultando el hecho de que el error tuvo lugar dentro deleval
. Como resultado, obtienes un error como este:Esto se parece mucho a que la primera línea del programa tiene un error de sintaxis. No es del todo correcto , pero el archivo
<string>
nofake_error.py
se puede distinguir del caso en el que, por ejemplo, se escribeimport
mal.Ambos errores son algo "poco claros" ya que pueden ser accidentales.
fuente
raise
en Python 2, pero en IDLE, el IDE predeterminado de Python, se produce un error interno al imprimir galimatías sobre colas.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 recuerda una broma práctica.
fuente
BrainF ***
No puedo encontrar el compilador particular que usé antes, pero le aseguro que ese es el mensaje de error exacto.
fuente
:)
Java
No sabía si se refería a lanzar una excepción no controlada (como en ese ejemplo) o simular un mensaje de error. Si ese es el caso, esto debería funcionar:
C
(esto supone que
stdio.h
está # incluido)fuente
Game Maker Language
fuente
ACTIONSCRIPT 3
fuente