Messages d'erreur
Tous les messages d'erreur qu'un programme peut afficher, classés par sorte, avec leur sens et la correction habituelle.
Quand quelque chose ne va pas, l'ordinateur affiche une ligne rouge et revient à l'invite. Cette page liste les messages du jeu, classés par sorte, avec ce que chacun veut dire et la façon habituelle de le corriger. Les messages sont toujours en anglais, quelle que soit la langue du jeu : ils sont donc écrits en anglais ici aussi. Pour en retrouver un, cherchez quelques-uns de ses mots dans la page avec votre navigateur (Ctrl+F).
Lire une erreur
> pompe pompe:4: attempt to index a nil value (local 'cuve')
pompeest le fichier où c'est arrivé (jeux/snake/mainpour un fichier dans un dossier,brasspour une ligne tapée dans l'interpréteur interactif).4est la ligne. Ouvrez le fichier avecedit pompe: l'éditeur affiche les numéros de ligne.- Le reste est le message. Entre parenthèses, l'erreur nomme souvent la variable ou le champ en cause : ici, la variable locale
cuve.
Une erreur arrive à l'un de deux moments :
- Les erreurs de compilation sont trouvées avant le démarrage du programme, quand le fichier entier est lu. Rien ne s'exécute : corrigez la ligne et relancez le fichier.
- Les erreurs d'exécution surviennent pendant que le programme tourne, quand une ligne fait quelque chose d'impossible. Le programme s'arrête là ; ce qu'il a fait avant (sorties redstone, fichiers écrits) reste fait.
Une erreur d'exécution peut être attrapée avec pcall, qui renvoie une table au lieu d'arrêter le programme. Le message commence alors par le fichier et la ligne, comme à l'écran. Vos propres erreurs, levées avec error, fonctionnent de la même façon :
local function prendre(nombre)
if nombre > 64 then error("une pile contient 64 objets au plus") end
return nombre
end
local r = pcall(prendre, 100)
print(r.ok)
print(r.error)false snippet:2: une pile contient 64 objets au plus
pcall attrape toutes les erreurs d'exécution de cette page, mais pas les erreurs de compilation, ni Ctrl+T. Voir Erreurs et débogage.
Les fonctions des bibliothèques se nomment sans leur bibliothèque : une erreur sur 'write' peut venir de fs.write, et 'set' de rs.set, de link.set ou d'une méthode de périphérique. Le numéro de ligne dit de quel appel il s'agit.
Erreurs de compilation
Le programme ne démarre pas. La ligne donnée est celle où le compilateur a remarqué le problème, parfois un peu après la vraie faute (un end manquant ne se remarque qu'à la fin du fichier).
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
'then' expected near 'print' | Il manque un mot ou un symbole là où le compilateur le nomme. Le même message existe pour do, =, ), ], in... | Ajoutez ce qui est nommé : if x > 1 then, while actif do, for i = 1, 10 do. |
'end' expected (to close 'if' at line 3) near <eof> | Un bloc ouvert à cette ligne ne se termine jamais. Existe aussi pour function, for, while, do, et 'until' pour repeat, ')' pour (, '}' pour {. | Ajoutez le end (ou la ), la }) manquant. Indentez votre code pour voir quel bloc reste ouvert. |
'<eof>' expected near 'end' | Un end de trop : le fichier devrait s'arrêter là. | Retirez le end en trop, ou le else qui n'est dans aucun if. |
unexpected symbol near ')' | Une valeur était attendue et autre chose est venu : print(1, ), x =, un opérateur sans rien devant. | Complétez l'expression. |
unexpected symbol '&' | Un caractère que Brass n'utilise pas : &, |, ?, @, $... | and / or au lieu de && / || ; retirez le caractère. |
unexpected symbol '!' (use 'not') | !x n'est pas du Brass. | not x. (!= est permis : il veut dire ~=.) |
unexpected symbol '~' | Un ~ tout seul. | ~= pour « différent », not pour « non ». |
syntax error near '+' | Une ligne qui n'est ni une affectation ni un appel, comme compte + 1 seul ou un nom de variable nu. | compte = compte + 1, ou print(compte + 1). |
cannot assign to this expression | À gauche du =, quelque chose qui ne peut pas recevoir de valeur : f() = 1, a + b = c. | Affectez une variable ou un champ : x = ..., t.k = .... |
ambiguous syntax (function call x new statement) near '(' | Une ligne commence par ( juste après une ligne qui finit par une valeur : Brass ne sait pas si c'est un appel. | Réunissez les deux lignes, ou commencez la ligne autrement (local v = (a or b)). |
a function returns a single value (return a table instead) | return a, b. | return {x = a, y = b}, puis lisez r.x et r.y. |
'end' expected after return near 'print' | Du code après un return dans le même bloc. | return doit être la dernière ligne de son bloc. Placez le code avant. |
cannot capture local 'x' of an enclosing function | Une fonction écrite dans une autre utilise une local de la fonction qui l'entoure. Brass n'a pas de fermetures. | Passez la valeur en paramètre, ou déclarez la variable en haut du fichier (les locales du fichier sont permises). |
cannot assign to a function's own name from inside it | Une local function déclarée dans une autre fonction affecte son propre nom dans son corps (local function etape() etape = nil end). | Utilisez une autre variable. |
'break' outside a loop | Un break qui n'est dans aucun while, for ou repeat. | return pour sortir d'une fonction. |
variable arguments ('...') are not supported | function f(...). | Prenez une table : f({1, 2, 3}). |
a generic 'for' takes at most 2 variables | for a, b, c in .... | Deux variables au plus : for k, v in pairs(t). |
a generic 'for' takes a single iterator expression | La forme Lua for k, v in next, t. | for k, v in pairs(t) do. |
unfinished string | Un texte sans guillemet de fin avant le bout de la ligne. | Fermez les guillemets. Sur plusieurs lignes, utilisez "\n" ou [[ ... ]]. |
unfinished long string or comment | [[ ou --[[ jamais fermé par ]]. | Ajoutez le ]]. |
malformed number near '12p' | Un nombre collé à des lettres (12px), 0x sans chiffres, 1e sans exposant. | Séparez le nombre, ou corrigez-le. |
invalid escape sequence '\q' | Une barre oblique inverse devant une lettre que Brass ne connaît pas. Connues : \n \t \r \0 \\ \" \' et \xNN. | Pour la barre oblique inverse elle-même, écrivez \\. |
hexadecimal digit expected in escape sequence | \x qui n'est pas suivi de deux chiffres hexadécimaux. | \x41 vaut "A". |
too many nested levels | Plus de 200 blocs ou parenthèses imbriqués. | Découpez le code en fonctions. |
program too complex | Le compilateur a manqué de place (signalé à la ligne 0). | Répartissez le programme en fonctions ou en fichiers. |
Erreurs d'exécution
Le programme s'arrête à cette ligne. La plupart viennent d'une variable qui vaut nil là où le programme attendait une valeur : un nom mal écrit, une mesure qui a renvoyé nil, un périphérique absent.
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
attempt to perform arithmetic on a nil value | + - * / // % ^ ou un signe moins sur autre chose qu'un nombre (aussi a string value, a table value, a boolean value...). Un texte n'est jamais changé en nombre tout seul : "10" + 1 échoue. | Vérifiez que la valeur existe (if x then), convertissez un texte avec tonumber. |
attempt to concatenate a nil value | .. avec autre chose qu'un texte ou un nombre (a table value, a boolean value...). | tostring(v) autour de la valeur. |
attempt to get length of a number value | # sur autre chose qu'un texte ou une table. | Utilisez # sur le texte ou la liste elle-même. |
attempt to index a nil value (global 'coffre') | x.y ou x[k] alors que x n'est pas une table. La fin nomme x : global, local, field 'nom'. Causes habituelles : un nom mal écrit, un peripheral.wrap qui n'a rien trouvé, une bibliothèque que cet ordinateur n'a pas (net sur un Ordinateur à transistors). | Vérifiez le nom, testez nil après peripheral.wrap / peripheral.find, vérifiez l'ordinateur. |
attempt to index a string value with a number key | s[1] sur un texte. | string.sub(s, 1, 1). |
attempt to call a nil value (global 'pirnt') | Appeler quelque chose qui n'est pas une fonction : une faute de frappe, une fonction définie plus bas dans le fichier que l'appel, une méthode que le bloc n'a pas. Aussi (field 'nom'), (method 'nom'). | Corrigez le nom ; définissez les fonctions avant le code qui les lance. |
an iterator can only be used in a 'for' loop | Appeler directement le résultat de pairs(t) ou ipairs(t). | for k, v in pairs(t) do. |
attempt to compare number with nil | <, >, <=, >= entre des valeurs de sortes différentes, ou qui ne se rangent pas (attempt to compare two table values). Levée aussi par table.sort sur une liste mélangée. | Comparez deux nombres ou deux textes ; tonumber d'abord ; donnez une fonction de comparaison à table.sort. |
'for' initial value must be a number | Un for numérique dont le départ n'est pas un nombre. Aussi 'for' limit must be a number et 'for' step must be a number. | Vérifiez les valeurs, souvent une variable à nil. |
'for' step is zero | for i = 1, 10, 0. | Un pas différent de zéro. |
use pairs() or ipairs() to iterate a table with two variables | for k, v in t. | for k, v in pairs(t) ou ipairs(t) ; for v in t (une variable) marche. |
attempt to iterate over a nil value | for v in x alors que x n'est pas une table. | Vérifiez que x existe. |
table index is nil | Écrire t[k] = v avec k qui vaut nil. Lire t[nil] est permis (cela donne nil). | Vérifiez la variable qui sert de clé. |
table index is NaN | t[0/0] = v. | Vérifiez le calcul de la clé. |
assertion failed! | assert(valeur) avec une valeur false ou nil et sans message. | Donnez un message à assert : assert(coffre, "pas de coffre à gauche"). |
| votre propre message | error("..."), ou assert(valeur, "..."). error() sans rien affiche nil. | C'est votre programme qui parle. |
internal error: ... | Un bogue du mod, pas de votre programme. | Signalez-le avec le programme qui le provoque. |
Terminated | Pas une erreur : le joueur a appuyé sur Ctrl+T ou sur le bouton Stopper. |
Arguments des bibliothèques
Une fonction de bibliothèque a reçu une valeur de la mauvaise sorte. #1 est le premier argument, #2 le deuxième.
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
bad argument #1 to 'set_cursor' (number expected, got no value) | Un argument a le mauvais type. got no value : il manque ou vaut nil ; got string : un texte là où un nombre était attendu, et ainsi de suite. Aussi string expected, table expected, boolean expected. | Vérifiez l'ordre et le type des arguments sur la page de la fonction. |
bad argument #2 to 'set' (number has no integer representation) | Un nombre entier était attendu et un nombre à virgule est venu (7.5), ou l'infini. | math.floor, math.round. |
bad side 'up' (front, back, left, right, top, bottom) | rs ne connaît que ces six faces. | "top" pour le haut, "bottom" pour le bas. |
bad argument #1 to 'set_fg' (color must be 0..15) | term.set_fg et term.set_bg prennent un nombre de 0 à 15. | term.colors.red, ou voir Couleurs. |
bad argument #3 to 'pixel' (unknown colour 'grey': white, orange, ..., none) | Un nom de couleur que gfx ne connaît pas. Le message liste les 16 noms et none. | "gray", "light_gray" : les noms sont ceux des teintures de Minecraft, en anglais. |
bad argument #3 to 'pixel' (colour (0..15 or a name) expected, got no value) | La couleur d'une fonction gfx manque ou a le mauvais type. | Donnez un nombre de 0 à 15 ou un nom. |
bad argument #3 to 'image' (row 2 is not a string) | Une ligne de gfx.image n'est pas un texte. | Chaque ligne est un texte comme "0ff0". |
bad argument #1 to 'label' (at most 32 characters) | os.label avec un nom trop long. | 32 caractères au plus. |
bad argument #2 to 'tonumber' (base out of range) | La base de tonumber va de 2 à 36. | tonumber("ff", 16). |
bad argument #1 to 'type' (value expected) | type() sans argument. | type(x). |
bad argument to 'random' (interval is empty) | math.random(m, n) avec m plus grand que n (ou math.random(0)). | Vérifiez les bornes. |
bad argument #1 to 'char' (value out of range) | string.char prend des codes de 0 à 65535. | Vérifiez le code. |
invalid conversion '%q' to 'format' | Un code % que string.format ne connaît pas, une largeur de plus de deux chiffres, ou un % tout à la fin. | %d %i %f %s %x %X, %% pour le signe lui-même. |
bad argument #2 to 'format' (no value) | Moins de valeurs que de codes %. | Une valeur par code %. |
bad argument #2 to 'format' (number has no integer representation) | %d ou %x avec un nombre à virgule. | %f, %.1f, ou arrondissez d'abord. |
bad argument #2 to 'insert' (position out of bounds) | table.insert(t, pos, v) avec pos hors de 1 à #t + 1. Aussi 'remove' (1 à #t). | Vérifiez la position. |
wrong number of arguments to 'insert' | table.insert(t) sans valeur. | table.insert(t, valeur). |
invalid value (at index 3) in table for 'concat' | table.concat a rencontré autre chose qu'un texte ou un nombre (ou un trou) à cette position. | Ne gardez que des textes et des nombres dans la liste, ou convertissez avec tostring. |
bad argument #2 to 'sort' (function expected, got string) | Le second argument de table.sort doit être une fonction. | table.sort(t, function(a, b) return a > b end). |
Fichiers et import
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
no storage medium | fs ou import sans support dans l'ordinateur. | Insérez-en un (clic droit sur l'ordinateur avec). |
bad argument #1 to 'write' (invalid file name 'mes notes') | Un nom de fichier ou de dossier avec un caractère interdit. Les noms utilisent lettres, chiffres, _, . et -, de 1 à 32 caractères, et ne peuvent pas être . ou ... Les lettres accentuées sont interdites. | mes_notes. |
bad argument #1 to 'read' (path too long (128 characters at most)) | Le chemin entier dépasse 128 caractères. | Des noms plus courts, moins de dossiers. |
bad argument #1 to 'list' (no folder above the root) | Un chemin avec plus de .. que de dossiers. | Vérifiez le chemin ; fs.cwd() dit où vous êtes. |
invalid file name '' | Une opération de fichier sur la racine elle-même, comme fs.write("/", texte). | Donnez un nom de fichier. |
not enough space | Le support est plein. | fs.free() dit ce qui reste. Supprimez des fichiers, ou prenez un support plus grand. |
too many files (1024 at most) | Un support contient 1024 fichiers et dossiers au plus. | Supprimez des fichiers, ou regroupez les données dans moins de fichiers. |
no folder 'journaux' | fs.list sur un dossier qui n'existe pas. | fs.make_dir("journaux") d'abord, ou vérifiez avec fs.is_dir. |
'journaux' is a file | Un dossier était attendu (fs.list, fs.make_dir, déplacer un dossier dessus). | Prenez un autre nom. |
'journaux' is a folder | Un fichier était attendu : fs.write ou fs.append sur un dossier, ou fs.move / fs.copy vers un dossier existant. | fs.move et fs.copy prennent le nouveau chemin complet : fs.move("journal", "vieux/journal"). |
'notes' is a file, not a folder | Le chemin passe par un fichier comme si c'était un dossier (notes/jour alors que notes est un fichier). | Renommez l'un des deux. |
no file 'rapport' | fs.move ou fs.copy depuis un chemin qui n'existe pas. | Vérifiez avec fs.exists. |
a folder cannot go inside itself | Déplacer ou copier un dossier dans lui-même. | Choisissez une autre destination. |
a file cannot be copied onto itself | fs.copy avec deux fois le même chemin. | Choisissez un autre nom. |
the root cannot be deleted | fs.delete("/"). Aussi the root cannot be moved or copied. | Supprimez les fichiers un par un. |
cannot import 'outils': no such file | import n'a pas trouvé le fichier. Le chemin part du dossier du fichier qui importe. Aussi it is a folder, ou une erreur de chemin après les deux-points. | Vérifiez le nom et le dossier ; /lib/outils depuis la racine. |
circular import: 'a' is still being imported | Deux fichiers s'importent l'un l'autre. | Mettez ce qu'ils partagent dans un troisième fichier. |
Un fichier absent n'est pas une erreur pour fs.read (qui renvoie nil), fs.size (nil) ou fs.delete (false). Une erreur de compilation dans un fichier importé garde le nom et la ligne de ce fichier : lib/outils:4: 'then' expected near 'print'.
Réseau
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
attempt to index a nil value (global 'net') | Le Calculateur à tubes et l'Ordinateur à transistors n'ont pas de réseau. | Un Mini-ordinateur ou plus récent. |
message too large | Un message contient plus de 2048 valeurs ou plus de 32768 caractères de texte en tout. | Envoyez moins, ou en plusieurs messages. |
cannot send a function | Seuls les nombres, les textes, les booléens et les tables de tout cela voyagent. | Envoyez des données, pas des fonctions. |
table is too deep (or cyclic) to convert | Des tables imbriquées sur plus de 32 niveaux, ou une table qui se contient elle-même. | Aplatissez les données. |
bad argument #1 to 'send' (number expected, got string) | net.send prend d'abord le numéro, puis les données. | net.send(id, données, canal). |
Ce ne sont pas des erreurs : net.send renvoie false quand l'ordinateur est hors de portée, éteint, ou que sa mémoire de réception est pleine, et net.receive(délai) renvoie nil quand rien n'est venu.
Périphériques et blocs
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
attempt to index a nil value (local 'feu') | peripheral.wrap ou peripheral.find a renvoyé nil : rien à piloter là. | Vérifiez la face ou le type, testez if feu then. |
no peripheral 'left' | peripheral.call sur une face ou un nom sans bloc à piloter. | peripheral.list() donne les noms. |
peripheral 'left' has no method 'set' | Ce bloc n'a pas cette méthode. | peripheral.type(nom), puis la page de ce bloc. |
peripheral is not loaded | Le bloc est dans un chunk qui n'est pas chargé. | Gardez le chunk chargé, ou attendez. |
traffic light removed | Le bloc enveloppé a disparu, ou a été remplacé. Aussi monitor removed, radio removed, sensor removed, burner removed, not a kinetic block anymore, not an inventory anymore, not a tank anymore. | Enveloppez-le à nouveau quand le bloc est revenu. |
bad aspect 'blue' (off, red, red_amber, amber, green, flashing) | Ce n'est pas un aspect du Feu tricolore. | L'un des six noms. |
only Wi-Fi routers have an SSID | set_ssid sur un Modem radio. | Utilisez un Routeur Wi-Fi. |
redstone link not ready | La Liaison de redstone n'a pas pu être lue : elle n'est pas encore prête. | Réessayez un instant plus tard. |
set_speed needs a Rotation Speed Controller | set_speed sur un autre bloc cinétique. | Enveloppez le Contrôleur de vitesse de rotation lui-même. |
no inventory 'coffre' | La cible de push n'est pas le nom d'un inventaire que l'ordinateur peut joindre. | peripheral.list("inventory") donne les noms. |
bad item id 'Iron Ingot' | link prend des identifiants d'objets, pas des noms affichés. Aussi unknown item 'minecraft:iron' pour un identifiant qui n'existe pas. | "minecraft:iron_ingot" : F3+H affiche les identifiants dans les infobulles. |
too many link frequencies (max 32) | L'ordinateur utilise déjà 32 fréquences de Liaison de redstone. | Réutilisez des fréquences ; redémarrez pour toutes les libérer. |
burner not ready | Le brûleur à air chaud n'a pas pu être lu : il n'est pas encore prêt. | Réessayez un instant plus tard. |
this version of Simulated has no getXAngle | Create Simulated a changé : une méthode que le mod lit manque (le nom varie). Aussi this version of Simulated has no spring limit, sensor error: .... | Mettez à jour Create: Computing Ages, ou prenez la version de Create Aeronautics qui lui correspond. |
Mémoire et limites
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
out of memory | Les données vivantes du programme dépassent la mémoire de l'ordinateur. | Lâchez ce qui ne sert plus (t = nil), gardez moins de textes et plus courts, surveillez avec os.memory(), ou prenez un ordinateur plus gros. |
stack overflow | Plus de 200 appels imbriqués, en général une fonction qui s'appelle elle-même sans fin. | Ajoutez la condition d'arrêt, ou changez la récursion en boucle. |
string too long | Un texte de plus de 65536 caractères (.., string.rep, string.format, table.concat). | Écrivez par morceaux, dans un fichier avec fs.append. |
too many timers | 256 minuteurs attendent déjà. | Ne lancez un nouveau minuteur qu'une fois le précédent arrivé à terme. |
Les autres limites ont leur propre message plus haut : too many files, path too long, message too large, too many link frequencies, too many nested levels. Tous les nombres sont sur Limites.
Messages du shell
Ceux-ci viennent de la ligne de commande, pas d'un programme. Certains s'affichent dans la langue du joueur : ils sont donnés ici en anglais.
| Message | Ce que ça veut dire | Correction habituelle |
|---|---|---|
No such program: pmpe | Aucun fichier de ce nom dans le dossier courant. | ls liste les fichiers. |
No such file: pmpe | run sur un fichier qui n'existe pas. Aussi No such file pour cat, rm, cp, mv. | Vérifiez le nom. |
'jeux' is a folder: cd jeux | Le nom tapé est un dossier. | cd jeux, puis le nom du programme. |
No folder 'jeux' | cd ou ls sur un dossier qui n'existe pas. | mkdir jeux le crée. |
No storage medium: right-click the computer with one | La commande a besoin d'un support. | Insérez-en un. |
'jeux' is not empty: rm -r jeux | rm refuse de supprimer un dossier qui contient des fichiers. | rm -r jeux. |
'jeux' already exists | mkdir sur un nom qui existe déjà. | Un autre nom. |
Usage: cp <from> <to> | Il manque un argument à la commande. | Suivez l'usage affiché. |
No library 'gfx' | help gfx sur un ordinateur sans cette bibliothèque. | help liste les bibliothèques de cet ordinateur. |