0

所以我正在尝试使用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不是 a List<List>,因此嵌套循环会抛出一个错误('inside'错误),因为1是一个int,而不是一个List

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

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

4

1 回答 1

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
于 2013-06-29T08:31:02.087 回答