|
|
1
13
一些异常类,例如 Error ,无法处理来自try/catch块内的流控制。这会导致细微的错误:
解决方法是使用一个状态变量,并检查try/catch块外部的情况,在我看来,它非常像臭烘烘的n00b代码。 另外两个错误的“gotchas”(这两个都给我带来了悲伤,因为如果你以前没有遇到过,它们很难调试):
看起来很明智,对吧?此代码可编译,但会导致奇怪和不可预测的错误。问题是:
哦,是的,这也提醒了我,因为
|
|
|
2
25
Try::Tiny (或构建在上面的模块)是处理Perl5中异常的唯一正确方法。所涉及的问题是微妙的,但链接的文章详细解释了它们。 以下是如何使用它:
有些人认为这是一个拼凑,但在阅读了其他语言(以及Perl5)的实现之后,它与其他语言没有什么不同。只有一个
|
|
|
3
24
大多数人学习的处理异常的典型方法很容易丢失捕获的异常:
你可以做到:
这可以防止由于以下原因而丢失异常:
为了确保你不会破例,当你进行评估时,你必须本地化。
这都是细微的破损,预防需要很多深奥的样板。 在大多数情况下,这不是问题。但我已经被真正的代码中的异常吞噬对象析构函数烧死了。调试这个问题很糟糕。 情况显然很糟糕。看看CPAN构建的所有模块,它们提供了相当好的异常处理。 压倒性的支持 Try::Tiny 再加上Try::Tiny不是“聪明到一半”,说服了我去尝试一下。诸如此类 TryCatch 和 Exception::Class::TryCatch , Error 一天又一天对我来说太复杂了。Try::Tiny是朝着正确的方向迈出的一步,但我仍然没有一个轻量级的异常类可以使用。 |
|
|
4
9
我最近遇到的一个问题
解决方案是检查
我在这里看到的问题是
|
|
|
5
2
使用Perl时,语言和用户编写的异常是结合在一起的:都是
您可以捕获用户编写的异常的基础。
如果有的话
两者都能抓住。
记住捕获任何非用户异常
也可以将异常包装在Sub调用Sub来抛出它。 |
|
6
1
在C++和C++中,您可以定义可以抛出的类型,并使用单独的catch块来管理每种类型。根据我在Chomatic的博客上看到的,Perl类型的系统有一些与RTTI和继承相关的琐碎问题。 我不确定其他动态语言是如何管理异常的,C++和C语言都是静态语言,它在类型系统中具有一定的功率。 这个 哲学的 问题在于,Perl5异常是栓接在一起的;它们不是从语言设计开始就构建起来的,作为Perl编写方式的一个组成部分。 |
|
|
7
1
自从我使用Perl以来已经很长一段时间了,所以我的内存可能是模糊的和/或Perl可能已经得到了改进,但是从我所记得的(与我每天使用的Python相比)来看:
|
|
|
8
0
不要对常规错误使用异常。只有将停止当前执行的致命问题才会消失。所有其他应在没有
示例:被调用Sub的参数验证:不要在第一个问题时死亡。检查所有其他参数,然后通过返回某些内容或警告来决定停止,并纠正错误参数,然后继续。在测试或开发模式下完成的。但可能
JPR(我的CPAN登录) 来自德国S凝胶的问候 |
|
|
tomm · 谷歌表格-将两列相乘,复制第三列 4 年前 |
|
|
ziemsterr · 无法在SQL SELECT语句中找出此语法错误 4 年前 |
|
|
Andrés BolÃvar · AJAX请求未收到我想要的属性 4 年前 |
|
|
clarkk · 当声明向量时,(1)是什么意思? 4 年前 |
|
|
Mike C. · Bash错误[:检查文件是否存在时缺少“]” 4 年前 |
|
|
michael · 错误的脚本和语法问题 4 年前 |