- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我对下面的代码感到困惑:
class MyException extends Exception {}
class AnotherException extends MyException {}
class Foo {
public function something() {
print "throwing AnotherException\n";
throw new AnotherException();
}
public function somethingElse() {
print "throwing MyException\n";
throw new MyException();
}
}
$a = new Foo();
try {
try {
$a->something();
} catch(AnotherException $e) {
print "caught AnotherException\n";
$a->somethingElse();
} catch(MyException $e) {
print "caught MyException\n";
}
} catch(Exception $e) {
print "caught Exception\n";
}
我希望这个输出:
throwing AnotherException
caught AnotherException
throwing MyException
caught MyException
但它输出:
throwing AnotherException
caught AnotherException
throwing MyException
caught Exception
谁能解释为什么它“跳过”catch(MyException $e)?
谢谢。
最佳答案
异常处理程序捕获由其 try block 范围内的代码引发的异常。
对 $a->somethingElse()
的调用不会发生在与跳过的异常处理程序关联的 try block 中。它出现在另一个 catch 子句中。
仅仅因为它物理上出现在引发异常的行下方不足以使其覆盖该代码。
恕我直言,缩进大括号的样式选择使这一点不太清楚。前一个 try block 的右括号与下一个 catch 出现在同一行,即使它们是不相关的(好吧,兄弟)范围。
关于php - 对此 PHP 异常 try..catch 嵌套感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586608/
我正在尝试学习Rust。我正在阅读一本书online,该书实现了unix程序cat。现在,我试图读取作为像cargo run file1.txt file2.txt这样的参数传递的文件的内容,但是程序
我在 GHC 8.0.1 中遇到了一个带有种类索引 (?) GADT 的奇怪情况,其中在类型与种类签名中引入 foralls 会产生不同的类型检查行为。 考虑以下数据类型: {-# LANGUAGE
我正在使用 Perl 5.10 开发应用程序,HTML::Mason和 Apache 2.2。这是我第一次在大型项目中使用 Perl 5.10。我每隔一段时间就会出现奇怪的行为。应用程序因一个非常奇怪
我正在尝试将文件上传到aws中的rust中,因为我使用的是 rusoto_s3 的s3 rust客户端,当这些部分从单个线程发送时,我设法使分段上传代码正常工作不是我想要的,我想上传大文件,并且希望能
我是一名优秀的程序员,十分优秀!