Yar*_*tov 8 wolfram-mathematica
是否有可能看到Message被截断的完整版本?IE,我0.105309,0.394682,<<20>>,<<20>>,<<20>>,0.394631在Messages窗口看到的东西.我猜是<<20>>代表省略的部分,我如何得到整个事情?
对50个变量的问题调用的函数是FindMaximum.
更新: Simon的答案似乎适用于一般消息,我也发现了一种特定于捕获FindMaximum"非实数"消息的方法.
要获得导致FindMaximum失败且带有"非实数"消息的点,您可以执行以下操作(重新定义Message是我能找到的唯一方法,因为该点未传递给EvaluationMonitor或StepMonitor)
Unprotect[Message];
Message[FindMaximum::"nrnum", args___] := (captured = {args};
Print["Captured FindMaximum::nrnum at ", First[{args}]]);
{badvals, badvars, badobj} = ReleaseHold[captured];
Run Code Online (Sandbox Code Playgroud)
Sim*_*mon 10
我不确定您是否可以恢复已生成的长消息.由于$MessageList与Message[]只保存消息的名字,而不是传递给它们的参数.
要停止Short[]自动应用于消息Unset[$MessagePrePrint].它的默认值是Automatic- 无论需要什么.
不是一直打印长消息,而是使用类似的东西可能更好
General::longmsg="A long message (`1`) was produced. The full message has been saved in `2`";
$MessagePrePrint=With[{bc=ByteCount[#]},If[bc>65536,
With[{fn=FileNameJoin[{$HomeDirectory,StringJoin["MmaMsg",ToString/@DateList[]]}]},
Put[#,fn];Message[General::longmsg,bc,Row[{fn}]];Short[Shallow[#],1]],
#]]&;
Run Code Online (Sandbox Code Playgroud)
这将打印出正常的消息,除非ByteCount它太大(> 65536),在这种情况下它将打印出两条消息:第一条通知您生成了一条大消息,并为您提供保存它的文件.第二个是完整消息的截断版本.
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |