当一个MATLAB®函数引发错误,MATLAB引擎的Python®停止函数并捕获由MATLAB引发的异常。引擎将错误消息复制到一个新的Python异常中。引擎引发Python异常。
如果Python解释器捕获了异常,则解释器将显示来自MATLAB的错误消息。您还可以在Python代码中处理由引擎引发的异常。看到matlab.engine.MatlabEngine
和matlab.engine.FutureResult
引擎可能引发的异常类型的引用页。
调用MATLAB√6
Python中的整数函数。(此代码示例省略了Python跟踪,只显示了错误消息。)
导入matlab。Engine eng = matlab.engine.start_matlab() print(eng.sqrt(4))
未定义函数'sqrt'用于类型'int64'的输入参数。
MATLAB定义了一个√6
函数,但期望输入参数为数据类型双
,不是整数。然而,输入参数是4,在它被传递给MATLAB之前,Python将4解释为整数。引擎将Python整数转换为int64
MATLAB数据类型。
MATLAB和Python为数字定义了不同的默认类型。如果你输入x = 4
在MATLAB命令行中,x
MATLAB是一种双
.如果你输入x = 4
在Python命令行中,x
是一个Pythonint
.
要避免此错误,请指定Python数据类型的输入参数浮动
.引擎将这种类型转换为MATLAB双
.
打印(eng.sqrt (4.0))
2.0
你可以调用MATLABeval
函数从Python创建MATLAB变量。(此代码示例省略了Python跟踪,只显示了错误消息。)
导入matlab。Engine eng = matlab.engine.start_matlab() eng。eval (x = 4,)
在等号左边的表达式不是一个有效的赋值目标。
当引擎调用eval
,将语句传递给MATLAB执行。当不指定输入参数时nargout
输入参数,引擎需要一个输出参数。但是,这个MATLAB语句不返回输出参数。
若要避免此错误,请指定nargout
当您调用的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)
文件"", line 1 eng.print("-djpeg","surf",nargout=0) ^ SyntaxError:无效语法
如果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
)
如果你重写操作系统临时
或TMP
在MATLAB环境变量中,Python可能无法连接到MATLAB引擎的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 ()