主要内容

进行故障排除MATLAB错误Python

MATLAB错误Python

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

如果Python解释器捕获了异常,解释器将显示来自MATLAB的错误消息。您还可以在Python代码中处理引擎引发的异常。看到matlab.engine.MatlabEnginematlab.engine.FutureResult引擎可以引发的异常类型的参考页。

MatlabExecutionError:未定义的函数

调用MATLAB√6函数。(此代码示例省略了Python跟踪,只显示错误消息。)

导入matlab。Engine eng = matlab.engine.start_matlab() print(eng.sqrt(4))
未定义函数'sqrt'的输入参数类型为'int64'。

MATLAB定义了一个√6函数,但期望输入参数为数据类型,而不是整数。然而,输入参数是4,在传递给MATLAB之前,Python将4解释为一个整数。该引擎将Python整数转换为int64MATLAB数据类型。

MATLAB和Python为数字定义了不同的默认类型。如果你输入x = 4在MATLAB命令行中,xMATLAB是一种.如果你输入x = 4在Python命令行中,x是一个Pythonint

要避免此错误,请指定Python数据类型的输入参数浮动.引擎将这种类型转换为MATLAB

打印(eng.sqrt (4.0))
2.0

语法错误:表达式目标无效

你可以调用MATLABeval函数创建MATLAB变量。(此代码示例省略了Python跟踪,只显示错误消息。)

导入matlab。Engine eng = matlab.engine.start_matlab() eng。eval (x = 4,)
SyntaxError:错误:等于号左边的表达式不是赋值的有效目标。

当引擎召唤时eval,它将语句传递给MATLAB执行。当您没有指定输入参数时nargout输入参数,引擎需要一个输出参数。然而,这个MATLAB语句不返回输出参数。

若要避免此错误,请指定nargout当您调用的MATLAB函数没有返回输出参数时,为0。

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

SyntaxError:无效的语法

调用MATLAB打印函数来打印用MATLAB创建的图冲浪函数。

导入matlab。Engine eng = matlab.engine.start_matlab() eng.eval("surf(peaks)",nargout=0) eng.print("-djpeg","surf",nargout=0)
^ SyntaxError: invalid syntax .print("-djpeg","surf",nargout=0)

如果MATLAB和Python函数具有相同的名称,那么引擎将调用MATLAB函数。

但是,引擎不能直接调用一个名称在Python语言中也是保留字的MATLAB函数。例如,在Python 2.7中,打印是一个保留字。(在Python 3。x, the previous code runs because打印是内置函数,而不是保留字。)

为了避免这个错误,调用MATLAB函数eval

eng.eval(“打印(“-djpeg”、“冲浪”);“,nargout = 0)

如果MATLAB函数是您创建的函数,您可以重命名它,使其名称不再是Python保留字。Python文档列出了保留词:

找不到MATLAB会议在Python

如果你重写了操作系统临时TMP在MATLAB环境变量中,Python可能无法连接到MATLAB Engine for Python。例如,如果你在Python提示符处输入以下代码:

matlab.engine.find_matlab ()

Python显示()

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

操作系统。环境(TMP的)= r 'temp_folder的操作系统。环境(临时的)= r 'temp_folder' eng = matlab.engine.find_matlab ()

相关的话题