4


我是 Perl 编程的新手(也是 SO),所以我的问题可能以一种糟糕的方式表述,但我确实阅读了很多书籍和教程,但我没有找到任何解决(甚至提到)我的问题的东西。

我正在尝试使用 DBI 和 SQLite 编写一些代码,如果发生可恢复的错误(数据库已满或锁定等),则重试插入查询,但如果错误不可恢复(数据库已删除或损坏等),则会死亡。

我发现 SQLite C 接口导出错误代码:

http://www.sqlite.org/c3ref/c_abort.html

但我还没有发现任何与 Perl 类似的东西。我真希望我不必在我的第一个 Perl 程序中使用幻数!:-)

顺便说一句,我在网上看到的文档和示例很好地解释了 DBI 中的手动与自动(即有异常)错误处理,但没有一个显示如何根据错误类型采取不同的操作。这不是一个常见的用例吗?
此外,他们都同意 DBI::err 不是判断发生了哪个错误的正确变量。他们或多或少含蓄地说要使用 DBI::errstr,但我发现依赖字符串比较与面向人的可能多行错误字符串有点尴尬......

感谢您的任何建议!

4

1 回答 1

1

我使用 DBI 的工作几乎总是使用 mysql 而不是 sqlite3,所以我无法从直接经验中发言。但是,如果您绝对必须检查魔术字符串和数字,请不要感觉太糟糕。关键是你怎么做。每当您必须依赖魔术字符串和/或数字时,请将它们放在脚本的配置部分(甚至可能是配置文件)中的常量或散列中。

幻数/字符串的坏处是,如果它们发生变化,它们很难管理,或者没有人完全记得是什么产生了这种情况,等等。但如果你做得正确并记录下来,这种情况就会得到缓解。

顺便说一句 - 如果您刚刚开始,我强烈建议您阅读 Damian Conway 的“Perl 最佳实践”。我查了一下,他没有处理魔法字符串/数字,但这仍然是我读过的关于 Perl 的最好的书。一旦你通过了 PBP,看看 Perl Critic——它是一个让你哭泣的绝妙工具。它将标记魔术字符串以及许多其他东西:)

于 2013-05-21T02:26:17.100 回答