2009/8/7 yi wang <wangyi2412@gmail.com>
我的印象中,常见的一般有以下两种:
1. 函数返回 undef 或者空列表等假值,然后由调用者自己检查 errcode 和 errstr,一个实例是 Memcached::libmemcached,GD.pm. 在 LWP::UserAgent 中是返回一个 HTTP::Response 对象,其中包含了是否成功的状态位,故也是类似的。这里的 errstr 也常被置到变量 $@ 中。
2. 函数出错时直接抛出异常(即在内部直接 die 掉,或者 croak 掉),然后由调用者捕捉异常,比如 DBI 在 RaiseError 选项启用时的行为便是如此。这里亦可同时提供 errcode(errstr 可以直接在 die 信息里了,即 $@ 中,呵呵)。
方法 1 很 C 风格,而方法 2 则比较 Java 风格。一般法 2 会比较自由一些,因为可以从很深的出错位置抛出异常到很高的层面上,而不必自己一级一级地返回 undef 之类的,呵呵。从许多常用的 CPAN 模块的 API 来看,方法 1 更常见一些,而方法 2 多用于一些意料之外的"真正的异常",呵呵。
诸位,请教大家一个开放问题
诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这个方法不够smart, 诸位有没有什么其他办法呢?
我的印象中,常见的一般有以下两种:
1. 函数返回 undef 或者空列表等假值,然后由调用者自己检查 errcode 和 errstr,一个实例是 Memcached::libmemcached,GD.pm. 在 LWP::UserAgent 中是返回一个 HTTP::Response 对象,其中包含了是否成功的状态位,故也是类似的。这里的 errstr 也常被置到变量 $@ 中。
2. 函数出错时直接抛出异常(即在内部直接 die 掉,或者 croak 掉),然后由调用者捕捉异常,比如 DBI 在 RaiseError 选项启用时的行为便是如此。这里亦可同时提供 errcode(errstr 可以直接在 die 信息里了,即 $@ 中,呵呵)。
方法 1 很 C 风格,而方法 2 则比较 Java 风格。一般法 2 会比较自由一些,因为可以从很深的出错位置抛出异常到很高的层面上,而不必自己一级一级地返回 undef 之类的,呵呵。从许多常用的 CPAN 模块的 API 来看,方法 1 更常见一些,而方法 2 多用于一些意料之外的"真正的异常",呵呵。
Cheers,
-agentzh
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论