【问题标题】:Dart try/catch clause unexpected behaviourDart try/catch 子句意外行为
【发布时间】:2013-06-27 00:35:30
【问题描述】:

所以我正在尝试使用try/catch 子句,但我不明白为什么会发生这种情况(正常与否):

void main() {
  List someList = [1,2,3];
  try {
    for (var x in someList) {
      try {
        for (var z in x) {

        }
      } catch(e) {
        throw new Exception('inside');
      }
    }
  } catch(e) {
    throw new Exception('outside');
  }
}

所以你看我试图在循环中做一个循环,但故意,someList 不是List<List>,因此嵌套循环将抛出一个错误('inside' 错误),因为1int,而不是List

情况就是这样,但发生的情况是它引发了“外部”错误。

这正常吗?如果是这样,我哪里出错了?

【问题讨论】:

    标签: exception-handling try-catch dart


    【解决方案1】:

    您遇到的异常是因为 w 未定义。如果您将w 更改为someList,那么您将得到x 没有迭代器的异常,正如您所期望的那样。然后,您将处理该“内部”异常并立即抛出另一个您将捕获的异常,然后您将抛出您不处理的“外部”异常,并且会看到错误。 (这可能会使您看起来遇到“外部”错误,但错误是从“内部”开始的。)

    这可能会让事情更清楚:

    void main() {
      List someList = [1,2,3];
      try {
        for (var x in someList) {
          try {
            for (var z in x) {             // This throws an exception
    
            }
          } catch(e) {                     // Which you catch here
            print(e);
            print("Throwing from inside");
            throw new Exception('inside'); // Now you throw another exception
          }
        }
      } catch(e) {                         // Which you catch here
        print(e);
        print("Throwing from outside");
        throw new Exception('outside');    // Now you throw a third exception
      }
    }                                      // Which isn't caught, causing an
                                           //  "Unhandled exception" message
    

    【讨论】:

    • 忘了把w改成someList,但是还是从外面扔了
    • @Ahoy -- 继续阅读。在捕获到您从“内部”抛出的异常之前,它不会从“外部”抛出。您只会看到一条关于您没有处理的异常的消息,即外部异常(由内部引起...)
    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多