模块:莫霍::例外
起源:Mojo::基础

名称

Mojo::Exception-Exception基类

简介

#创建异常类程序包MyApp::X::Foo{使用Mojo::Base“Mojo::Exception”;}程序包MyApp::X::Bar{使用Mojo::Base“Mojo::Exception”;}#抛出异常并优雅地处理它们使用Mojo::Exception qw(检查);评估{MyApp::X::Foo->throw(“出了问题!”);};检查$@=>['MyApp::X::Foo'=>子{说“Foo:$_”},“MyApp::X::Bar”=>子{说“Bar:$_”}];#根据需要生成异常类使用Mojo::Exception qw(检查raise);评估{引发“MyApp::X::Name”,“名称Minion已被占用”;};检查$@=>[“MyApp::X::Name”=>子{说“名称错误:$_”},default=>sub{say“Error:$_”}];

说明

Mojo::异常是包含上下文信息的异常的容器。

功能

Mojo::异常实现以下功能,这些功能可以单独导入。

检查

my$bool=check$err=>['MyApp::X::Foo'=>子{…}];

通过将异常分派给具有一个或多个匹配条件的处理程序来处理异常。无法处理的异常将自动重新抛出。请注意,此函数是实验而且可能会毫无预警地发生变化!

#处理各种类型的异常评估{危险代码();};支票$@=>['MyApp::X::Foo'=>子{说“Foo:$_”},qr/^无法打开/=>子{说“打开错误:$_”},default=>sub{说“出错了:$_”}];

匹配条件可以是异常对象上ISA检查的类名,也可以是匹配字符串异常和字符串化异常对象的正则表达式。匹配的异常将是传递给回调的第一个参数,也可以作为$_.

#捕获MyApp::X::Foo对象或特定字符串异常评估{危险代码();};检查$@=>['MyApp::X::Foo'=>子{说“Foo:$_”},qr/^无法打开/=>子{说“打开错误:$_”}];

数组引用可用于共享具有多个条件的同一处理程序,其中只有一个条件需要匹配。由于异常处理程序只是回调,因此它们也可以抛出自己的异常。

#处理MyApp::X::Foo和MyApp::X::Bar相同评估{危险代码();};检查$@=>[['MyApp::X::Foo','MyApp::X::Bar']=>子{die“Foo/Bar:$_”}];

当前只有一个关键字可用于设置特殊处理程序。这个违约处理程序在没有其他处理程序匹配时使用。

#使用“default”捕获所有内容评估{危险代码();};检查$@=>[default=>sub{say“Error:$_”}];

提升

raise“出了问题!”;提升“MyApp::X::Foo”,“出现问题!”;

提出Mojo::异常,如果类尚不存在(检查类是否存在新的方法),一个创建为Mojo::异常按需子类。请注意,此函数是实验而且可能会毫无预警地发生变化!

属性

Mojo::异常实现以下属性。

框架

我的$frames=$e->帧;$e=$e->帧([$frame1,$frame2]);

堆栈跟踪(如果可用)。

#从最后一帧提取信息my($package、$filename、$line、$subroutline、$hasargs、$wantarray、$evaltext、,$is_require,$hints,$bitmask,$hinthash)=@{$e->frames->[-1]};

线

我的$line=$e->line;$e=$e->行([3,'die;']);

发生异常的行(如果可用)。

行_之后

我的$lines=$e->lines_after;$e=$e->lines_after([[4,'说$foo;'],[5,'说$bar;']]);

发生异常的行之后的行(如果可用)。

行前(_B)

我的$lines=$e->lines_before;$e=$e->lines_before([[1,'my$foo=23;'],[2,'my$bar=24;']]);

发生异常的行之前的行(如果可用)。

消息

我的$msg=$e->消息;$e=$e->message(“在test.pl第3行死亡”);

异常消息,默认为例外!.

冗长的

我的$bool=$e->verbose;$e=$e->verbose($bool);

显示更多信息“字符串”,例如“框架”,默认为MOJO_EXCEPTION_VERBOSE公司环境变量。

方法

Mojo::异常从继承所有方法Mojo::基础并实现了以下新功能。

检查

$e=$e->检查;$e=$e->检查($source1,$source2);

检查“消息”,“框架”和可选的其他要填充的源“行前”,“线路”“行_后”包含上下文信息。

新的

my$e=Mojo::Exception->new;my$e=Mojo::Exception->new('Died at test.pl line 3.');

构建新的Mojo::异常对象和分配“消息”如有必要。

到字符串(_S)

我的$str=$e->to_string;

呈现异常。请注意,随着更多功能的添加,输出格式可能会更改,只有开头的错误消息保证不会被修改以允许正则表达式匹配。

Mojo::Exception->throw(“出了问题!”);

从当前执行上下文引发异常。

#较长版本die Mojo::Exception->new(“出了问题!”)->trace;

追踪

$e=$e->跟踪;$e=$e->跟踪($skip);

生成堆栈跟踪并存储所有“框架”,默认为跳过1调用帧。

#跳过3个调用帧$e->跟踪(3);#跳过无调用帧$e->trace(0);

操作员

Mojo::异常重载以下运算符。

布尔

我的$bool=$e;

始终正确。

纤细的

my$str=“$e”;

的别名“字符串”.

另请参阅

莫乔利奇,Mojolicious::指南,https://mojolicious.org.