12

我正在使用 Octave 版本 3.4.3,并收到以下警告:

warning: fmincg.m: 
possible Matlab-style short-circut operator at line 104, column 20

我知道为什么会出现这个警告,我只是想让警告在运行时不会出现在屏幕上。

我知道我可以通过将此命令放在八度程序的顶部来抑制所有警告:

warning('off','all');

但这会禁用所有错误形式的警告。如何只禁用这个?

4

3 回答 3

16

在 GNU Octave 中按警告类型禁用警告:

请参阅此处的警告列表及其警告 ID 和名称:“12.2.2 启用和禁用警告”部分。 https://octave.sourceforge.io/octave/function/warning_ids.html

警告名称和 id 使用 octave 命令列出:

help warning_ids

在警告发生之前将此命令放入您的 octave 程序中:

warning('off', 'Octave:possible-matlab-short-circuit-operator');

或禁用所有警告

warning('off', 'all');

注意:如果您的警告是在您的脚本运行之前由 octave 解释器本身抛出的,那么您将不得不采取不同的方法。例如 use octave yourfile.m 2>/dev/nullwhich 也有重定向 octave 引擎和脚本的 stderr 的不幸副作用。

某些警告会终止进程,并且无法抑制,必须对其进行补救:

像这个:

warning: function /home/el/octave/multicore-0.2.15/gethostname.m 
         shadows a built-in function

要解决此问题,请将 /home/el/octave/multicore-0.2.15/gethostname.m 重命名为 /home/el/octave/multicore-0.2.15/gethostname_backup.m。警告消失了。这是软件中的一个错误,其中两个文件具有相同的名称,因此程序不知道该使用哪个文件。

于 2012-07-08T15:44:00.213 回答
8

要找出警告的 ID,只需发出

[text, id] = lastwarn()

警告发生后直接。id现在包含警告的 id,可用于将其关闭:

warning('off', id)
于 2015-03-23T16:30:35.743 回答
4

通过两个简单的步骤使您的更改持久化:

  1. 成为根
  2. 将命令附加到文件 (/usr/share/octave/site/m/startup/octaverc),它将在启动时执行任何 Octave 命令。

    echo "warning('off','Octave:shadowed-function')" >> /usr/share/octave/site/m/startup/octaverc

我也喜欢持久地自动加载所有包:

echo "pkg load all" >> /usr/share/octave/site/m/startup/octaverc

注意:按照这个顺序,否则你从加载所有包中得到的任何阴影功能警告仍然会出现。

您的文件现在应该包含

warning('off','Octave:shadowed-function')
pkg load all

感谢Gunther Struyf告诉我们如何关闭阴影功能警告(上图)。参考:https ://wiki.archlinux.org/index.php/Octave

于 2014-07-09T02:11:04.040 回答