当一个matlab.®函数引发错误,Matlab引擎用于Python®停止函数并捕获MATLAB抛出的异常。引擎将错误消息复制到一个新的Python异常。引擎会引发Python异常。
如果Python解释器捕获异常,则解释器显示来自MATLAB的错误消息。您还可以处理引擎在Python代码中提出的异常。看看matlab.engine.MatlabEngine
和matlab.engine.FutureResult
引擎可以引发的异常类型的参考页。
调用MATLAB√6
函数。(此代码示例省略了Python跟踪,只显示错误消息。)
导入matlab。Engine eng = matlab.engine.start_matlab() print(eng.sqrt(4))
matlab.engine.matlabexecutionerror:用于输入'Int64'的输入参数的未定义功能'sqrt'。
MATLAB定义了一个√6
函数,但期望输入参数为数据类型双
,而不是整数。然而,输入参数是4,在传递给MATLAB之前,Python将4解释为一个整数。该引擎将Python整数转换为int64
MATLAB数据类型。
MATLAB和PYTHON定义数字的不同默认类型。如果你输入x = 4.
在MATLAB命令行中,x
MATLAB是一种双
.如果你输入x = 4.
在Python命令行中,x
是一个Python㈡
.
要避免此错误,请指定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执行。当您没有指定输入参数时露怪
输入参数,引擎需要一个输出参数。然而,这个MATLAB语句不返回输出参数。
若要避免此错误,请指定露怪
当您调用的MATLAB函数没有返回输出参数时,为0。
eng。eval("x = 4;",nargout=0)
调用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文档列出了保留字:
Python 2.7保留字(https://docs.python.org/2/reference/lexical_analysis.html#keywords
)
Python 3。xreserved words (https://docs.python.org/3/reference/lexical_analysis.html#keywords
)
如果您覆盖操作系统tem
或者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 ()