【问题标题】:perl6 Catching non-fatal exceptions in autovivificationperl6 在自动激活中捕获非致命异常
【发布时间】:2019-01-05 11:42:44
【问题描述】:

我正在对大约 10000 行数字进行分析,其中一些行给了我错误:“在数字上下文中使用 Any 类型的未初始化值”。我正在尝试捕获此错误以查看导致问题的行。但是,X::TypeCheck 和其他 X::* 类似乎不能有效地捕捉 Nil 或 Any 的自动激活。例如:

try { say Any + 1; CATCH { default { say "oh-no"; } }; }

打印出警告消息后仍然给我“1”的答案,并且没有说我想要的“哦-不”。

捕获这些非致命自动激活错误的正确方法是什么?顺便问一下,有没有核动力的 perl6 调试器?

非常感谢!!!

lisprog

【问题讨论】:

  • 相关助记符:对于致命异常,P6 变得疯狂并准备 CRASH,您必须使用 CATCH 捕获 CRASH 并记住正确处理 CRAZY 程序状态,如果您足够疯狂.resume。但是对于 致命异常,P6 保持冷静和可控,您也可以保持冷静,什么也不做,或者您可以使用CONTROL 进行控制,并在您不假思索地完成时使用.resume关于它。具体来说,say 1/0 给你带来了一个你必须抓住的崩溃和你必须处理的疯狂。 say Any + 1 保持冷静,除非您想使用 CONTROL 进行控制,否则您无需执行任何操作。
  • 再次非常感谢你,raiph !!!并感谢助记符:-)

标签: exception raku autovivification


【解决方案1】:

使用quietlyCONTROL 代替tryCATCH

quietly { say Any + 1; CONTROL { default { say "oh-no" } } }

【讨论】:

  • 您不需要quietly,只需CONTROL 块:say Any + 1; CONTROL { say "oh-no"; .resume }
  • 谢谢伊丽莎白马蒂森!我在 YouTube 上看过你关于 Perl6 的一些讲座视频 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2014-02-03
  • 2014-08-30
  • 1970-01-01
  • 2014-08-26
  • 2012-02-08
  • 2019-01-13
相关资源
最近更新 更多