我想在不退出程序的情况下记录发生的错误,因此我将可能会引发错误的代码包含在try-catch这样的块中
try
{
let query = parseStatement(input); // might throw an error
console.log(query);
}
catch (err)
{
console.error(err); // logs the entire error with stack trace
}
finally
{
this.prompt();
}
Run Code Online (Sandbox Code Playgroud)
我想获得的输出是没有整个堆栈跟踪的错误消息。大致如下:
Error: Missing semicolon at the end of statement: <statement>
并不是
Error: Missing semicolon at the end of statement: <statement>
at error (/home/nic/dev/nodedb/src/errors.js:5:11)
at Function.tokenize (/home/nic/dev/nodedb/src/tokens.js:53:13)
at parseStatement (/home/nic/dev/nodedb/src/sql.js:35:24)
at Shell.onData (/home/nic/dev/nodedb/src/shell.js:49:25)
at ReadStream.emit (node:events:394:28)
at addChunk (node:internal/streams/readable:312:12)
at readableAddChunk (node:internal/streams/readable:287:9)
at ReadStream.Readable.push (node:internal/streams/readable:226:10)
at TTY.onStreamRead (node:internal/stream_base_commons:190:23)
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,比如说"dog cat fish",我想将其在第一个空格上分割成两个片段,如下所示:("dog", "cat fish")。
我尝试天真地使用split_once()这样的方法:
let string = "dog cat fish";
let (first_word, rest_of_string) = string.split_once(' ').unwrap();
Run Code Online (Sandbox Code Playgroud)
它对于常规空白字符有效。但是,我希望它也适用于其他类型的 Unicode 空白字符,就像\t该split_whitespace()方法一样。
不过,我不想使用split_whitespace(),因为它返回一个迭代器,我必须在迭代后重新收集并加入单词,因为这会浪费时间:
let mut it = string.split_whitespace();
let first_word = it.next().unwrap();
let rest_of_string = it.collect::Vec<&str>().join(" ");
Run Code Online (Sandbox Code Playgroud)
那么,如果我有一个像 那样的字符串"dog \t cat fish",我该如何分割它以获得这两个切片("dog", "cat fish")?
我也想过使用正则表达式,但是有更好的方法吗?