Perl 最佳实践(节选) --- 13
? ? 第十三章:错误处理? ? ? 壹陆玖.要抛出异常,不要返回特殊值或设定标记。 ? ? ? 壹柒零.让失败的内置函数也抛出异常。 ? ? ? 壹柒壹.让所有上下文中的失败都是致命失败。 ? ?????? #把不可接受的失败行为改为抛出异常 …… ?????? 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); ? ? ? 壹柒肆.从调用者的位置报告异常,而不要从抛出异常之处报告。 ? ? ? 壹柒伍.以接收者的方言编写错误消息。 ? ? ? 壹柒陆.以接收者的方言替每条错误消息编写说明文档。 ? ? ? 壹柒柒.每当失败数据必须传给处理程序时,就使用异常对象。 ? ? ? 壹柒捌.当错误消息可能改变时,就应使用异常对象。 ? ? ? 壹柒玖.当两个或多个异常彼此相关时,就应使用异常对象。 ? ? ? 壹捌零.以MDF(most-derived-first,最底层的派生为先)次序捕获异常对象。 ? ? ? 壹捌壹.自动建立异常类。 ? ? ? 壹捌贰.取出扩展的异常处理程序内的异常变量。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |