local function proc_close(a, b)
_XNO.processList[a] = nil
if b then panic("process, "..b) end
end
local function proc_load(a)
local thread = coroutine.create(function()
os.execute(a)
end)
_XNO.processList[thread] = a
local status, err = pcall(coroutine.resume, thread)
if not status then
proc_close(thread, err)
end
end
proc_load("/some_file")
当执行文件中出现错误时,pcall()不执行任何操作,返回错误,因为它将在主代码中返回。如果我在协同程序中使用pcall()函数,或者我的协同程序本身(或pcall())没有区别。我怎样才能发现错误?
答案 0 :(得分:2)
两个问题:(1)os.execute
在执行命令失败时不会抛出任何错误,它会返回nil
并报告错误,因此" resume&#34 ;成功完成,(2)您不需要pcall
,因为resume
来电已经执行了捕获错误所需的操作。试试下面的例子:
local thread = coroutine.create(function()
foo()
end)
print(coroutine.resume(thread))
这为我打印false pcall-thread.lua:2: attempt to call global 'foo' (a nil value)
。
答案 1 :(得分:1)
pcall
不执行任何操作,因为不会引发错误:执行文件中的错误不会在os.execute
的调用方中引发错误。您需要测试os.execute
的返回码并在需要时引发错误。