为什么 try-catch 块不捕获 child_process 由于 Node.js 中的无效可执行路径而产生的异常?
Why does not a try-catch block catch a child_process spawn exception due to invalid executable path in Node.js?
const { spawn } = require("child_process")
try{
spawn("invalid/path/to/executable")
}catch(err){
console.log("exception: ",err)
}
此代码引发错误,程序停止执行。它从不打印 exception:
所以 catch 块不会被执行:
events.js:183
throw er; // Unhandled 'error' event
^
Error: spawn invalid/path/to/executable ENOENT
当 运行 具有可执行文件的有效路径时,相同的代码有效。
由于ENOENT错误导致spawn失败怎么办?
此模块触发 error
事件,您只需为其添加一个侦听器即可。
您可以阅读更多相关信息 here
因此,您可以将代码转换为:
const {spawn} = require("child_process")
const subprocess = spawn("invalid/path/to/executable")
subprocess.on('error', function (err) {
console.log('Failed to start subprocess: ' + err);
});
此外,我建议阅读 Samer Buna 的这篇 article。他介绍了很多关于这个模块的有趣话题。
const { spawn } = require("child_process")
try{
spawn("invalid/path/to/executable")
}catch(err){
console.log("exception: ",err)
}
此代码引发错误,程序停止执行。它从不打印 exception:
所以 catch 块不会被执行:
events.js:183
throw er; // Unhandled 'error' event
^
Error: spawn invalid/path/to/executable ENOENT
当 运行 具有可执行文件的有效路径时,相同的代码有效。
由于ENOENT错误导致spawn失败怎么办?
此模块触发 error
事件,您只需为其添加一个侦听器即可。
您可以阅读更多相关信息 here
因此,您可以将代码转换为:
const {spawn} = require("child_process")
const subprocess = spawn("invalid/path/to/executable")
subprocess.on('error', function (err) {
console.log('Failed to start subprocess: ' + err);
});
此外,我建议阅读 Samer Buna 的这篇 article。他介绍了很多关于这个模块的有趣话题。