我发现有模块Error它提供了类似 java 中的 try and catch 功能。但是我对如何打印返回的异常感到困惑。
我想了解如何执行以下操作
try {
// do something that will fail!
} catch (Error e) {
// Print out the exception that occurred
System.out.println(e.getMessage());
}
如何使用堆栈跟踪打印错误?
最佳答案
最后我检查了,Error已弃用。但是,如果没有该模块,您将如何做到这一点:
eval {
die "Oops!";
1;
} or do {
my $e = $@;
print("Something went wrong: $e\n");
};
基本上,使用 eval而不是
try
, die而不是 throw
,并在 $@
中查找异常. eval block 末尾的真值是防止$@
的成语的一部分。在 5.14 之前的 Perl 版本中再次使用之前无意更改,请参阅 P::C::P::ErrorHandling::RequireCheckingReturnValueOfEval详情。例如,这段代码就存在这个缺陷。# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
eval {
die "Oops!";
};
if (my $e = $@) {
print("Something went wrong: $e\n");
}
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
但请注意,许多 Perl 操作在失败时不会引发异常;他们只是返回一个错误代码。可以通过 autodie 更改此行为用于内置和标准模块。如果您使用
autodie
,那么执行 try/catch 的标准方法是这样的(直接来自 autodie perldoc):use feature qw(switch);
eval {
use autodie;
open(my $fh, '<', $some_file);
my @records = <$fh>;
# Do things with @records...
close($fh);
};
given ($@) {
when (undef) { say "No error"; }
when ('open') { say "Error from open"; }
when (':io') { say "Non-open, IO error."; }
when (':all') { say "All other autodie errors." }
default { say "Not an autodie error at all." }
}
要获取堆栈跟踪,请查看 Carp .
关于perl - 如何正确使用error.pm提供的perl中的try catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342875/