如何在perl中测试异常类型?
发布时间:2020-12-15 21:53:15 所属栏目:大数据 来源:网络整理
导读:如何检查导致脚本或eval块终止的异常类型? 我需要知道错误的类型以及异常发生的位置. 解决方法 Perl的方式 Idiomatic Perl是我们要么忽略所有错误,要么捕获它们以便记录或转发到其他地方: eval { func() }; # ignore error 要么: eval { func() };if ($@)
如何检查导致脚本或eval块终止的异常类型?
我需要知道错误的类型以及异常发生的位置. 解决方法
Perl的方式
Idiomatic Perl是我们要么忽略所有错误,要么捕获它们以便记录或转发到其他地方: eval { func() }; # ignore error 要么: eval { func() }; if ($@) { carp "Inner function failed: $@"; do_something_with($@); } 或者(使用Try::Tiny – 查看该页面,了解您可能希望在Perl的内置异常处理中使用它的原因): try { func() } catch { carp "Inner function failed: $_"; do_something_with($_); }; 如果要检查异常类型,请使用正则表达式: if ( $@ =~ /open file "(.*?)" for reading:/ ) { # ... } 行和文件也在该字符串中. 这是非常讨厌的,因为你必须知道确切的字符串.如果您真的想要良好的错误处理,请使用CPAN中的异常模块. 异常:类 $@不必是字符串,它可以是一个对象. Exception::Class允许您声明并抛出Java风格的异常对象.您可以在抛出错误时传递任意信息(文件名等),并使用对象方法而不是正则表达式解析来获取该信息 – 包括异常的文件和行号. 如果您使用的是不使用Error :: Exception的第三方模块,请考虑 $SIG{__DIE__} = sub { Exception::Class::Base->throw( error => join '',@_ ); }; 这会将所有错误转换为Exception :: Class对象. Error::Exception为Exception :: Class对象设置正确的字符串化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |