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

Tim*_*imo 18 error-handling functional-programming wolfram-mathematica

每当我创建一个大型的Mathematica项目时,我都遇到了这个问题:防止Mathematica中的运行时错误雪崩,即Mathematica的错误信息是不透明的,过时的和军团.

然后,我们的想法是禁用所有Mathematica自己的错误消息,并在每个功能和模块中实现您自己的类型检查和错误消息.然而,我还没有找到一种简单而有效的方法来完成这项工作并最终得到,例如,某些函数生成错误20函数调用深度,然后获得整个级联的错误消息一直回到主例程.

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

编辑:因为它提出了几个答案; 我特意在寻找关于它产生的输出的轻量级(否则我可以坚持使用Mathematica的错误消息),并且显然在计算开销方面也是轻量级的.因此,虽然StackTrace上开销肯定是轻,他们在复杂项目输出不快速分析和需要做一些工作简化它.

Dr.*_*ius 9

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
Run Code Online (Sandbox Code Playgroud)

结论......在第一条消息中止并留下"合理的"堆栈跟踪."合理"是指"应该改进".

但这完全是非侵入性的!