2017-09-19 5 views
1

Je ne suis pas du tout familier avec Lua et j'ai besoin de travailler avec du code Lua.Lua: Erreur de rendement: tentative d'indexation d'une valeur nulle (local 'f')

J'ai la méthode suivante où je passe dans un fichier et je veux lire le contenu de ce fichier sous forme de chaîne.

function readAll(file) 
    local io = require("io") 
    local f = io.open(file, "rb") 
    local content = f:read("*all") 
    f:close() 
    return content 
end 

Pour cela, je reçois:

Lua: Yield error: [string "myFile.lua"]:101: attempt to index a nil value (local 'f') 

L'erreur apparaît sur cette ligne:

local content = f:read("*all") 

Toute idée de ce que pourrait être la cause?

+2

accoridng à ce https://www.lua.org/pil/21.2.html il peut retourner nul en cas d'erreur. Exemples fille ou répertoire n'existe pas ou les permissions empêchent le fichier d'être ouvert –

+0

Ce message ne provient pas de la librairie Lua. Quel programme utilisez-vous les embouts Lua? – lhf

Répondre

2

L'erreur signifie que io.open a échoué. Pour voir pourquoi, essayez

local f = assert(io.open(file, "rb")) 

ou

local f,e = io.open(file, "rb") 
if f==nil then print(e) return nil end 
+0

Merci. Maintenant, je reçois: 'Lua: Yield error: tentative d'appeler une valeur nulle (global 'assert')'. Je suppose que je devrais importer une bibliothèque contenant 'assert'? – octavian

+1

@octavian, je ne sais pas pourquoi 'assert' n'est pas défini. Essayez le deuxième formulaire. – lhf

+0

Vous avez raison, ce fichier sous-jacent n'existe pas. Vous ne savez pas ce que j'ai besoin d'importer pour utiliser 'assert'? – octavian