首页 文章

为什么不是每种类型都抛出异常?

提问于
浏览
1

"Only the types that are inherited from the Throwable class can be thrown" . 任何人都可以解释我 . 为什么不是每种类型都可扔掉?如果在doc中没有提及函数可以抛出异常,那么它是否意味着它没有异常?

例如,我认为下一个try-catch块可以工作 . 但事实并非如此 .

try
    {
        writeln("(((((((((");
        latestdtonpage = dts.sort!((a,b) => a>b).front; //latest date-time. from page. 
    }
    catch(Exception e)
        {
            writeln("Can't select the latest Date from parsed date");
            writeln(e);
        }

但是,例外情况下的输出是下一个(没有例外文本):

(((((((((
core.exception.AssertError@C:\D\dmd2\windows\bin\..\..\src\phobos\std\array.d(73
9): Attempting to fetch the front of an empty array of DateTime
----------------
0x0051C4C9 in _d_assert_msg
0x00468E78 in pure nothrow ref @property @nogc @safe std.datetime.DateTime std.r
ange.__T11SortedRangeTAS3std8datetime8DateTimeS473app19StackOverflowParser5parse
MFAyaZ9__lambda2Z.SortedRange.front() at C:\D\dmd2\windows\bin\..\..\src\phobos\
std\range.d(8418)
0x0044F908 in void app.StackOverflowParser.parse(immutable(char)[]) at D:\code\T
rendoMetr\source\app.d(173)
0x0044F700 in app.StackOverflowParser app.StackOverflowParser.__ctor(app.DBConne
ct) at D:\code\TrendoMetr\source\app.d(150)
0x0044F199 in _Dmain at D:\code\TrendoMetr\source\app.d(33)
0x0052EDCA in D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv
0x0052ED9F in void rt.dmain2._d_run_main(int, char**, extern (C) int function(ch
ar[][])*).runAll()
0x0052ECB5 in _d_run_main
0x00470198 in main
0x005667D1 in mainCRTStartup
0x76D1336A in BaseThreadInitThunk
0x772A9F72 in RtlInitializeExceptionChain
0x772A9F45 in RtlInitializeExceptionChain
Error executing command run: Program exited with code 1

我怎么能在这段代码中抛出异常?

1 回答

  • 10

    您的代码抛出 AssertError ,表示 dts.sort!((a,b) => a>b) 为空,您不应该在其上调用 .front . 相反,首先查询 .empty ,并在其为真时进行相应的操作 .

    AssertError 继承自 Error ,后者继承自 Throwable 但不是来自 Exception . 所以 catch(Exception e) 没有 grab 它 . 而且你不应该 grab Error ,因为它们表明程序处于不可恢复的错误状态 .

    AssertError 特别表示程序中存在逻辑错误 . 这里:在空范围内调用 .front . 不要 grab AssertError ,而是修改代码 .

相关问题