Saltar al contenido
errores-por-lenguaje.en · devschool

Los errores más comunes de cada lenguaje en inglés

Lección 9 de 23 · 12 min de lectura · Actualizado el

En esta lección
  1. JavaScript
  2. Python
  3. Java
  4. PHP
  5. SQL
  6. Errores frecuentes
  7. Resumen

En la lección anterior viste la estructura general de los errores. Ahora toca la práctica: cada lenguaje tiene sus errores estrella, esos que verás cientos de veces. Aquí tienes los más comunes de JavaScript, Python, Java, PHP y SQL. Todos los mensajes están obtenidos ejecutando código de verdad (Node 22, Python 3, Java 21, PHP 8.4 y SQLite), con su traducción y lo que debes hacer.

Si no has leído Mensajes de error, empieza por ahí: aquí se da por conocido el vocabulario (expected, not defined, out of range…).

Nota: el texto exacto puede variar un poco entre versiones y entre navegadores (Chrome, Firefox y Safari redactan algunos errores de forma distinta). La idea es la misma.

JavaScript

JavaScript lanza errores con un tipo (TypeError, ReferenceError, SyntaxError, RangeError) y un mensaje.

1. Cannot read properties of undefined

const user = undefined;
console.log(user.name);
TypeError: Cannot read properties of undefined (reading 'name')
  • Traducción: “No se pueden leer propiedades de undefined (al leer name)”.
  • Qué pasa: user no tiene valor y has intentado acceder a .name. Con null, el mensaje dice of null.
  • Solución: averigua por qué user es undefined (¿no llegó el dato?). Si puede faltar, usa user?.name.

2. x is not a function

const order = {};
order.calculate();
TypeError: order.calculate is not a function
  • Traducción: “order.calculate no es una función”.
  • Solución: revisa que el nombre esté bien escrito y que ese método exista en ese tipo de dato.

3. x is not defined

console.log(totl);
ReferenceError: totl is not defined
  • Traducción: “totl no está definido”.
  • Solución: casi siempre es una errata (total) o una variable declarada fuera de alcance.

4. Assignment to constant variable

const rate = 1;
rate = 2;
TypeError: Assignment to constant variable.
  • Traducción: “Asignación a una variable constante”.
  • Solución: si el valor debe cambiar, declara con let en lugar de const.

5. Cannot access ‘x’ before initialization

console.log(x);
let x = 1;
ReferenceError: Cannot access 'x' before initialization
  • Traducción: “No se puede acceder a x antes de su inicialización”.
  • Solución: declara y asigna la variable antes de usarla.

6. Unexpected token / Unexpected identifier

const a = ;
SyntaxError: Unexpected token ';'
  • Traducción: “Símbolo inesperado ;”.
  • Solución: hay algo que falta o sobra justo antes. Mira la línea indicada y la anterior.

Otras variantes del mismo grupo: SyntaxError: Unexpected identifier 'b' (palabra inesperada), SyntaxError: missing ) after argument list (falta ) después de los argumentos) y SyntaxError: Identifier 'a' has already been declared (el identificador a ya ha sido declarado).

7. Unexpected end of JSON input

JSON.parse("");
SyntaxError: Unexpected end of JSON input
  • Traducción: “Fin inesperado de la entrada JSON”.
  • Qué pasa: intentas analizar un JSON vacío o cortado. Con JSON.parse("{name: 'Ana'}"), Node dice Expected property name or '}' in JSON at position 1.

8. Maximum call stack size exceeded

function f() { f(); }
f();
RangeError: Maximum call stack size exceeded
  • Traducción: “Se ha superado el tamaño máximo de la pila de llamadas”.
  • Solución: hay una recursividad sin condición de parada.

Python

Los errores de Python tienen nombres muy descriptivos y el mensaje final es corto.

1. NameError: name ‘x’ is not defined

print(nombre)
NameError: name 'nombre' is not defined
  • Traducción: “El nombre ‘nombre’ no está definido”.
  • Solución: mira si hay una errata o si olvidaste crear la variable.

2. IndexError: list index out of range

x = [1, 2, 3]
x[5]
IndexError: list index out of range
  • Traducción: “índice de lista fuera de rango”.
  • Solución: comprueba la longitud con len(x). Recuerda que el último índice es len(x) - 1.

3. KeyError

d = {"a": 1}
d["b"]
KeyError: 'b'
  • Traducción: “Error de clave: ‘b’”.
  • Solución: esa clave no existe. Usa d.get("b") para obtener None en vez de un error.

4. TypeError: can only concatenate str

"5" + 3
TypeError: can only concatenate str (not "int") to str
  • Traducción: “Solo se puede concatenar str (no int) con str”.
  • Solución: convierte uno de los dos: "5" + str(3) o int("5") + 3.

5. ValueError: invalid literal

int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
  • Traducción: “Literal no válido para int() en base 10: ‘abc’”.
  • Solución: el texto no es un número. Valida antes o usa try / except.

6. AttributeError

None.append(1)
AttributeError: 'NoneType' object has no attribute 'append'
  • Traducción: “El objeto ‘NoneType’ no tiene el atributo ‘append’”.
  • Qué pasa: la variable vale None, normalmente porque una función no hizo return.

7. IndentationError y SyntaxError

if True
    pass
SyntaxError: expected ':'
  • Traducción: “Se esperaba ’:’”.
  • Otros: IndentationError: unexpected indent (sangría inesperada) y SyntaxError: '(' was never closed (el paréntesis ( nunca se cerró).

8. ModuleNotFoundError, ZeroDivisionError, FileNotFoundError

ModuleNotFoundError: No module named 'modulo_que_no_existe'
ZeroDivisionError: division by zero
FileNotFoundError: [Errno 2] No such file or directory: 'nada.txt'
  • Traducciones: “No hay ningún módulo llamado…” (instálalo con pip install o revisa el nombre); “división por cero”; “No existe el archivo o directorio: ‘nada.txt’” (revisa la ruta).

También es común: TypeError: f() missing 1 required positional argument: 'b' (a f() le falta un argumento posicional obligatorio).

Java

Java distingue errores de compilación (los ves al compilar con javac) y de ejecución (excepciones al correr el programa).

Errores de compilación

1. ’;’ expected

int edad = 20
Bad1.java:3: error: ';' expected
        int edad = 20
                     ^
  • Traducción: “Se esperaba ’;’”. Te señala con ^ dónde falta.

2. cannot find symbol

System.out.println(total);
Bad2.java:5: error: cannot find symbol
        System.out.println(total);
                           ^
  symbol:   variable total
  location: class Bad2
  • Traducción: “No se puede encontrar el símbolo: variable total en la clase Bad2”.
  • Solución: errata, falta declarar la variable, o falta un import.

3. incompatible types

int n = "hola";
error: incompatible types: String cannot be converted to int
  • Traducción: “Tipos incompatibles: un String no se puede convertir a int”.
  • Variante: incompatible types: possible lossy conversion from double to int (“posible conversión con pérdida de double a int”).

4. missing return statement

error: missing return statement
  • Traducción: “falta la sentencia return”. Un método con tipo de retorno debe devolver algo en todos los caminos.

Y otros típicos: variable u might not have been initialized (la variable podría no haberse inicializado), variable x is already defined in method main(String[]) (la variable ya está definida), cannot assign a value to final variable k (no se puede asignar un valor a una variable final), non-static method hi() cannot be referenced from a static context (un método no estático no se puede usar desde un contexto estático) y reached end of file while parsing (se llegó al final del archivo al analizar: falta cerrar una llave).

Excepciones en ejecución

5. NullPointerException

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null
  • Traducción: “No se puede invocar String.length() porque <parameter1> es nulo”.
  • Solución: una variable vale null. Comprueba de dónde viene o comprueba if (s != null).

6. ArrayIndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
  • Traducción: “El índice 3 está fuera de los límites para una longitud de 3”. Un array de 3 elementos tiene índices 0, 1 y 2.

7. NumberFormatException y ClassCastException

java.lang.NumberFormatException: For input string: "abc"
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer
  • Traducciones: “Para la cadena de entrada: ‘abc’” (no es un número) y “la clase String no se puede convertir a la clase Integer”.

8. ArithmeticException y UnsupportedOperationException

java.lang.ArithmeticException: / by zero
java.lang.UnsupportedOperationException
  • Traducciones: “división por cero” y “operación no soportada” (por ejemplo, añadir a una lista creada con List.of, que es inmutable).

Nota: si no ves el nombre de la variable en un NullPointerException (<local1>, <parameter1>), es porque se compiló sin información de depuración. Compilando con javac -g verás el nombre real.

PHP

PHP 8 mezcla warnings (avisos que no paran la ejecución) y errores fatales (que sí).

1. Undefined variable

echo $nada;
Warning: Undefined variable $nada
  • Traducción: “Variable no definida $nada”. Solución: inicializa la variable antes de usarla.

2. Undefined array key

$a = [1];
echo $a[3];
Warning: Undefined array key 3
  • Traducción: “Clave de array no definida: 3”. Usa isset($a[3]) o $a[3] ?? "default".

3. Call to undefined function

Fatal error: Uncaught Error: Call to undefined function nofunc()
  • Traducción: “Error fatal: error no capturado: llamada a una función no definida nofunc()”.

4. Attempt to read property on null

$o = null;
echo $o->x;
Warning: Attempt to read property "x" on null
  • Traducción: “Intento de leer la propiedad ‘x’ de null”. Y si llamas a un método: Call to a member function metodo() on null.

5. Type errors

TypeError: g(): Argument #1 ($n) must be of type int, string given
  • Traducción: “El argumento nº 1 ($n) debe ser de tipo int, se ha dado un string”.

Y los de argumentos: ArgumentCountError: Too few arguments to function g(), 0 passed ... and exactly 1 expected (“Muy pocos argumentos… se pasaron 0 y se esperaba exactamente 1”).

6. Parse error

<?php $a = 5 echo $a;
PHP Parse error:  syntax error, unexpected token "echo"
  • Traducción: “Error de análisis: error de sintaxis, símbolo inesperado echo”. Suele faltar un ;. También verás unexpected end of file (fin de archivo inesperado: falta cerrar algo).

7. Division by zero y fallos al incluir archivos

DivisionByZeroError: Division by zero
Failed opening required 'nada.php'
  • Traducciones: “División por cero” y “No se pudo abrir el archivo requerido”.

SQL

Los errores de SQL cambian según el motor (MySQL, PostgreSQL, SQLite), pero los conceptos coinciden. Estos mensajes son de SQLite.

MensajeTraducciónQué hacer
no such table: usresno existe la tabla usresRevisa el nombre de la tabla
no such column: nombreno existe la columna nombreRevisa el nombre de la columna
near "selct": syntax errorcerca de selct: error de sintaxisMira cerca de esa palabra: errata o coma que falta
incomplete inputentrada incompletaLa consulta termina antes de tiempo (falta algo tras WHERE)
UNIQUE constraint failed: users.emailfalló la restricción de unicidadEstás insertando un valor que ya existe
NOT NULL constraint failed: users.emailfalló la restricción de no nuloFalta un valor obligatorio
FOREIGN KEY constraint failedfalló la restricción de clave foráneaReferencias un registro que no existe
ambiguous column name: idnombre de columna ambiguoIndica la tabla: users.id
table users already existsla tabla ya existeUsa CREATE TABLE IF NOT EXISTS
table users has 3 columns but 2 values were suppliedla tabla tiene 3 columnas pero se dieron 2 valoresIndica las columnas o aporta todos los valores

En PostgreSQL y MySQL verás mensajes parecidos: relation "usres" does not exist, Unknown column 'nombre' in 'field list' o Duplicate entry 'a@x.com' for key 'email'.

Un ejemplo completo:

INSERT INTO users(email, age) VALUES ('a@x.com', 20);
INSERT INTO users(email, age) VALUES ('a@x.com', 30);
UNIQUE constraint failed: users.email

La segunda sentencia viola la restricción de unicidad: el correo ya existía. Pronúnciala así: “unique constraint failed on users dot email” (constraint /konstréint/ = restricción).

Errores frecuentes

  • Mirar solo la palabra error y no el resto. El tipo (TypeError, KeyError) ya te da media solución.
  • Confundir undefined (JavaScript) con None (Python) o null. Cada lenguaje usa su propio “nada”.
  • Ignorar las líneas symbol: y location: de Java. Son las que dicen qué no encuentra y dónde.
  • Creer que un warning de PHP no importa. Un Undefined array key hoy es un bug mañana. Corrígelo.
  • No leer “near” en SQL. near "selct" te señala la palabra en torno a la cual falla.
  • Copiar el error entero al buscar. Quita rutas y nombres de tu proyecto antes de buscarlo.

Resumen

LenguajeErrores estrella
JavaScriptCannot read properties of undefined, is not a function, is not defined, Unexpected token
PythonNameError, IndexError, KeyError, TypeError, ValueError, AttributeError
Java';' expected, cannot find symbol, incompatible types, NullPointerException, ArrayIndexOutOfBoundsException
PHPUndefined variable, Undefined array key, Call to undefined function, Parse error
SQLno such table, no such column, syntax error, constraint failed

Siguiente lección: cómo moverte por la documentación oficial, en Leer documentación.

Pon a prueba lo que has aprendido

[Inglés] ¿Qué significa este error de Python?
KeyError: 'rope'

[Inglés] Java muestra: Index 3 out of bounds for length 3. ¿Qué ocurre?
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

[Inglés] ¿Qué te dice este error de SQLite?
no such table: usres

[Inglés] En PHP 8, ¿qué significa Warning: Undefined array key 3?

¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.