加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl 最佳实践(节选) --- 13

发布时间:2020-12-16 00:25:50 所属栏目:大数据 来源:网络整理
导读:? ? 第十三章:错误处理 ? ? ? 壹陆玖. 要抛出异常,不要返回特殊值或设定标记。 ? ? ? 壹柒零. 让失败的内置函数也抛出异常。 ? ? ? 壹柒壹. 让所有上下文中的失败都是致命失败。 ? ?????? #把不可接受的失败行为改为抛出异常 …… ?????? useFatal qw( :vo

?

?

第十三章:错误处理

?

?

?

壹陆玖.

要抛出异常,不要返回特殊值或设定标记。

?

?

?

壹柒零.

让失败的内置函数也抛出异常。

?

?

?

壹柒壹.

让所有上下文中的失败都是致命失败。

?

?????? #把不可接受的失败行为改为抛出异常 ……

?????? useFatal qw( :void locate_and_open);

?

?????? #稍后 ……

?????? formy $filename () {

????????????? my$fh = locate_and_open($filename);

????????????? my$head = load_header_from($fh);

????????????? print$head;

}

?

?

?

壹柒贰.

测试system内置函数的失败时要当心一点。

?

?????? usePOSIX qw ( WIFEXITED);

?????? #稍后……

?????? WIFEXITED(system$cmd)

????????????? Orcroak “Couldn’t run: $cmd ($OS_ERROR)”;

?

?

?

壹柒叁.

对所有失败都抛出异常,包括可复原的失败。

?

?????? TRY:

?????? formy $try (1..$MAX_TRIES) {

????????????? #如果资源成功地取得,就完成了……

????????????? eval{

???????????????????? $resource= acquire_resource($resource_id);

???????????????????? LastTRY;

????????????? };

????????????? #如果不再尝试,就报告不可复原的失败

????????????? croak($EVAL_ERROR ) if $try == $MAX_TRIES;

?

????????????? #不然就在随机拉长的时间间距后再试一次……

????????????? nap(rand fibonacci($try)? );? ghd

?????? }

?

?????? do_something_using($resource);

?

?

?

壹柒肆.

从调用者的位置报告异常,而不要从抛出异常之处报告。

?

?

?

壹柒伍.

以接收者的方言编写错误消息。

?

?

?

壹柒陆.

以接收者的方言替每条错误消息编写说明文档。

?

?

?

壹柒柒.

每当失败数据必须传给处理程序时,就使用异常对象。

?

?

?

壹柒捌.

当错误消息可能改变时,就应使用异常对象。

?

?

?

壹柒玖.

当两个或多个异常彼此相关时,就应使用异常对象。

?

?

?

壹捌零.

MDFmost-derived-first,最底层的派生为先)次序捕获异常对象。

?

?

?

壹捌壹.

自动建立异常类。

?

?

?

壹捌贰.

取出扩展的异常处理程序内的异常变量。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读