在Node.js中,当你抛出一个异常并且没有抓住它时,默认情况下会得到如下显示:
C:\tptp-parser\index.js:19
throw e
^
SyntaxError: Unknown language (33:7)
at err (C:\tptp-parser\index.js:14:10)
at Object.parse (C:\tptp-parser\index.js:354:5)
at read (C:\tptp-parser\tptp-parser.js:14:15)
at Object.<anonymous> (C:\tptp-parser\tptp-parser.js:37:3)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
前三行是源代码中抛出异常的位置,然后是消息,然后是堆栈跟踪。我知道如何自定义消息(如上例所示);有没有办法定制前三行?
也就是说,我正在编写一个解析器,如果我可以改变显示的前三行,而不是解析器中的代码行,而是解析文件中的文本行,那将是理想的。有没有办法做到这一点?
答案 0 :(得分:1)
SyntaxError
是一个nodejs
内置函数。
从repl调用它返回:
> SyntaxError('here')
SyntaxError: here
at SyntaxError (native)
at repl:1:1
at sigintHandlersWrap (vm.js:22:35)
at sigintHandlersWrap (vm.js:96:12)
at ContextifyScript.Script.runInThisContext (vm.js:21:12)
at REPLServer.defaultEval (repl.js:346:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:545:10)
at emitOne (events.js:101:20)
首先用您自己的节点替换节点的默认SyntaxError(msg)
,即可完成所需的操作。我认为您需要在必需的文件中执行此操作,以便在nodejs解析器尝试解析您的错误代码之前定义它。
在与SyntaxError()
进行一些讨论之后,我上面提出的建议可能无法奏效。
由于您正在编写解析器,因此可以查看pegjs,它允许您自定义解析期间抛出的错误。