error-handling - 在大型 Mathematica 项目中设置诊断错误消息

标签 error-handling functional-programming wolfram-mathematica

每当我创建一个大型 Mathematica 项目时,我都会遇到这个问题:Preventing avalanche of runtime errors in Mathematica ,即 Mathematica 的错误信息是 opaque、archaic 和 legion。

然后的想法是禁用 Mathematica 自己的所有错误消息,并在每个函数和模块中实现您自己的类型检查和错误消息。但是,我还没有找到一种简单而有效的方法来执行此操作,例如,某些函数会产生错误 20 次函数调用深度,然后将整个级联的错误消息一直返回到主程序。

您将如何为此设置一个简单的机制,仅在遇到错误的函数处生成一条错误消息以及函数调用链的简单列表?

编辑:因为它已经出现了几个答案;我特别在寻找关于它产生的输出的轻量级的东西(否则我可以坚持使用 Mathematica 的错误消息)并且显然在计算开销方面也是轻量级的。所以虽然StackTrace开销肯定很轻,它们在复杂项目中的输出解析速度不快,需要做一些工作来简化它。

最佳答案

YAsI - 另一个(愚蠢的?)想法......

重新阅读您的问题...

然后的想法是禁用 Mathematica 自己的所有错误消息,并在每个函数和模块中实现您自己的类型检查和错误消息。

发现这个:

$MessagePrePrint = ( #; Print[Stack[_][[;; -5]]]; Abort[]) &  

v[x_, y_] := w[x, y];
w[x_, y_] := x/y;

StackComplete@v[1, 0];

During evaluation of In[267]:= {StackComplete[v[1,0]];,
          StackComplete[v[1,0]], v[1,0], w[1,0], 1/0, 1/0, Message[Power::infy,1/0]}

Out[267]= $Aborted

结论......在第一条消息中中止并留下“合理的”堆栈跟踪。 “合理”的意思是“应该改进”。

但它是完全非侵入性的!

关于error-handling - 在大型 Mathematica 项目中设置诊断错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176612/

相关文章:

list - 从元组列表中删除反向重复项

haskell - Haskell中的短期练习错误

php - 在 PHP 中使用 ob_start()/ob_clean/ob_flush() 进行错误处理是否可以接受?

javascript - JavaScript 示例中 Function Monoids 的二元运算符是什么

wolfram-mathematica - 向 Mathematica 指定额外信息以简化表达式

wolfram-mathematica - Mathematica 帮助中的 ColorFunctionScaling 示例失败 - 为什么?

c - 如何使用多种开发语言

go - 如何处理go中的多个错误?

apache - mod_ldap Apache错误处理服务器错误500

perl - 如何从Moose构造函数报告错误?