![]() |
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凝胶的问候 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 2 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 3 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 3 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 3 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 7 年前 |