【问题标题】:Using Try::Tiny and $_ to get "the type of error"使用 Try::Tiny 和 $_ 获取“错误类型”
【发布时间】:2013-07-04 01:47:36
【问题描述】:

我编写了以下方法来获取日志错误。我使用 $_ 来获取“错误类型”。

sub _log_warning {
    my $log = Log::Server->new(
        base_dir =>
          &config->current->{'log_reader'}->{'base_dir'},
        pattern => &config->current->{'log_reader'}->{'pattern'},
    );
    $log->infof("Could not register to DB. Got $_");
}

因为我看到 $_ 用于获取产生的错误类型。 我在这种情况下使用了这个:

 use Try::Tiny;
 try { _log_to_database(); }
 catch {
     _log_warning();
 };

这在语法上可以吗?我希望 _log_warning();记录错误,$_ 应该说明发生的错误类型。但也许我没有很好地使用 $_?

更新:

当我尝试产生错误以激活该方法时,我得到:

 2013-07-04T11:15:56 [INFO] Could not register to DB. Got ã<81><9d>ã<81>®ã<82><88>ã<81>     <86>ã<81>ªã<83><95>ã<82>¡ã<82>¤ã<83>«ã<82><84>ã<83><87>ã<82>£ã<83>¬ã<82>¯ã<83><88>ã<83>>> ªã<81>¯ã<81><82>ã<82><8a>ã<81>¾ã<81><9b>ã<82><93>: /var/log/app.error.log.%Y%m%d at script.pl line 36.\n at script.pl line 113

:(

@ikegami 求救

【问题讨论】:

  • 你希望它做什么?它正在这样做吗?
  • @Flimzy 我希望 $_ 能够捕获错误类型。语法错误等等。?

标签: perl


【解决方案1】:

所以根据Try::Tiny文档:

在 catch 块内,捕获的错误存储在 $_ 中,而之前的 $@ 值仍然可以使用。

所以这个模块会将$_ 设置为捕获的错误,所以你的使用看起来是正确的。这是有趣的blog post 设计背后的逻辑。

【讨论】:

  • 谢谢!但我不解释为什么会出现“ãã®ãã”消息
  • @adriancdperu _log_to_database() 正在生成错误,消息来自那里,因此您需要追踪源以更好地了解错误。
  • 是的,错误捕获过程正常。在标准输出中,它给了我日语中的错误消息“文件不存在”。所以,这是一个结束的问题。不知何故,当我将错误作为日志放入文件夹时,它无法识别日语并给了我奇怪的符号。
  • @adriancdperu 这些文章可能对perlmonks.org/?node_id=913179perlgeek.de/en/article/encodings-and-unicode 有所帮助,但如果没有,您可能需要单独发布一个关于编码问题的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多