主要内容

对 Python 中的 MATLAB 错误进行故障排除

R2026b

Python 中的 MATLAB 错误

当 MATLAB® 函数引发错误时,MATLAB Engine for Python® 会停止该函数并捕获 MATLAB 引发的异常。引擎会将错误消息复制到新 Python 异常中。引擎会引发 Python 异常。

如果 Python 解释器捕获该异常,解释器会显示来自 MATLAB 的错误消息。您也可以在 Python 代码中处理引擎引发的异常。有关引擎可以引发的异常类型,请参阅 matlab.engine.MatlabEngine 和 matlab.engine.FutureResult 参考页。

MatlabExecutionError:未定义的函数

从 Python 对整数调用 MATLAB sqrt 函数。(以下代码示例省略 Python 追溯,仅显示错误消息。)

import matlab.engine
eng = matlab.engine.start_matlab()
print(eng.sqrt(4))
matlab.engine.MatlabExecutionError: Undefined function 'sqrt' for input arguments of type 'int64'.

MATLAB 定义 sqrt 函数,但期望输入参量的数据类型为 double,而不是整数。但是,输入参量是 4,并且在将其传递给 MATLAB 之前,Python 会将 4 解释为整数。引擎会将 Python 整数转换为 int64 MATLAB 数据类型。

MATLAB 和 Python 为数字定义不同默认类型。如果您在 MATLAB 命令行中键入 x = 4,则 x 是 MATLAB double。如果您在 Python 命令行中键入 x = 4,则 x 是 Python int。

为了避免此错误,请指定数据类型为 Python float 的输入参量。引擎会将此类型转换为 MATLAB double。

print(eng.sqrt(4.0))
2.0

SyntaxError:表达式不是有效目标

您可以从 Python 调用 MATLAB eval 函数以创建 MATLAB 变量。(以下代码示例省略 Python 追溯,仅显示错误消息。)

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("x = 4;")
SyntaxError: Error: The expression to the left of the equals sign is not a 
valid target for an assignment.

当引擎调用 eval 时,它会将一个语句传递给 MATLAB 来执行。当您未指定 nargout 输入参量时,引擎期望一个输出参量。但是,此 MATLAB 语句不返回任何输出参量。

为了避免此错误,请在您调用的 MATLAB 函数不返回任何输出参量时将 nargout 指定为 0。

eng.eval("x = 4;",nargout=0)

无法在 Python 中找到 MATLAB 会话

如果您在 MATLAB 中覆盖操作系统 TEMP 或 TMP 环境变量,Python 可能无法连接到 MATLAB Engine for Python。例如,如果您在 Python 提示符下键入以下内容:

matlab.engine.find_matlab()

Python 显示 ()。

MATLAB Engine for Python 使用临时文件夹记录共享的 MATLAB 会话的信息。要解决此问题,请在 Python 中对环境变量进行以下更改。temp_folder 是您在 MATLAB 中设置的文件夹的路径。

os.environ['TMP'] = r'temp_folder'
os.environ['TEMP'] = r'temp_folder'
eng=matlab.engine.find_matlab() 

另请参阅

主题