使用须知
要从 MATLAB 调用 Python 库,电脑需要安装有参考的 Python 版本。 MATLAB 支持2.7,3.4,3.5 和 3.6 版本。 由于不同的Python 库对应有不同的功能,而不同的库可能支持不同的 Python 版本。因此要注意。我电脑对应的 MATLAB 版本为 R2017b,Python 对应的版本为3.6。
Functions
pyversion | 改变 Python 解释器的默认版本 |
pyargs | 为 Python函数创建关键参数 |
pyversion 语法:
[version, executable, isloaded] = pyversion
___ = pyversion version
___ = pyversion executable
pyversion 显示关于当前Python版本的详细信息
[version,executable,isloaded] = pyversion 返回 Python 版本的信息
___ = pyversion version 改变系统默认的 Python 版本。该设置方式在 MATLAB 中是相同的。如果 Python 在 MATLAB 中已经加载过的话,便不能更改版本设置。只能重新启动后再调用 pyversion 进行设置。
___ = pyversion executable指定 Python 可执行文件的完整路径。 能够在在任何平台上使用。
输入参数:
version: 为 Python 版本号,可以为字符串或者字符向量,由主版本号和次版本号组成,中间由点分隔(仅限 Windows 平台)
使用时,pyversion 在 Windows 注册表中查找该版本。 如果是从Python官网下载安装的,安装会自动将之添加到注册表中。 如果从其他源下载的 Python 应用程序,要将其添加到注册表,或使用 pyversion(executable )语法更改版本。
示例:
pyversion 3.5
executable: 指现有 Python 可执行文件的名称,为字符串或字符向量。 此参数必须包含 Python 可执行文件的名称,并且它可以包含完整路径。
示例:
C:\Python33\python.exe /usr/bin/python
输出参数:
version: Python 版本号,为字符向量。
executable:Python 可执行文件的名称,为字符向量。
isloaded:表明指定的 Python 是否加载,为布尔值。
输入py. 的命令时,MATLAB 会加载 Python。
如果 MATLAB 没有加载 Python,isloaded为 0 且输入 py. 的命令时会出现错误。
代码验证:
示例:
pyversion
结果:
version: '3.6' executable: 'D:\Python3.6.5\python.EXE' library: 'D:\Python3.6.5\python36.dll' home: 'D:\Python3.6.5' isloaded: 1
示例:
[v, e, isloaded] = pyversion; if isloaded disp('To change the Python version, restart MATLAB, then call pyversion.') else pyversion 2.7 end
pyargs 语法:
kwa = pyargs(argKey,argValue)
kwa = pyargs(argKey,argValue) 创建一个 pyargs 关键字参数传递给 Python 函数
输入参数
argKey,argValue:Python 函数关键字参数可以指定一个或多个用逗号分隔的 argKey,argValue 参数对,其中 argKey 是 Python 函数的参数名(字符串或字符向量),argValue是对应的参数值,可以是任意类型。
另外可以使用函数参数列表来标识 argKey 和 argValue。 可以按任何顺序指定多个键和值对参数,如argKey1,argValue1,...,argKeyN,argValueN。
示例:
'length',int32(2)
代码验证:
示例:
cal = py.calendar.TextCalendar; formatmonth(cal,int32(2014),int32(12))
结果:
ans = Python str (不带属性)。 十二月 2014 周一 周二 周三 周四 周五 周六 周日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
查看函数功能:
py.help('calendar.TextCalendar.formatmonth')
结果:
Help on function formatmonth in calendar.TextCalendar: calendar.TextCalendar.formatmonth = formatmonth(self, theyear, themonth, w=0, l=0) Return a month's calendar string (multi-line).
显示 formatmonth 函数的其它形式:
methods(cal,'-full')
可以找到:
lhs formatmonth(self, theyear, themonth, w, l, pyargs)
上式中,w 和 l 是可选参数,默认为 0。显式调用为:
formatmonth(cal,int32(2014),int32(12),pyargs('l',int32(2)))
结果:
ans = Python str (不带属性)。 十二月 2014 周一 周二 周三 周四 周五 周六 周日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Classes
matlab.exception.PyExeption | 捕获 Python 异常的错误信息 |
matlab.exception.PyExeption类
处理来自 matlab.exception.PyException 对象的信息,以处理从 MATLAB 调用的 Python 方法抛出的 Python 错误。
结构
e = matlab.exception.PyException(msgID,errMsg,excObj)
输入参数
msgID:信息标识符,为字符向量
errMsg:错误信息,为字符向量
ExcObj:异常对象,指定为导致异常的 pythonclass
输出参数
e:matlab.exception.PyException 类的实例
属性
ExceptionObject:Python sys.exc_info 函数的结果。
对于 sys.exc_info(),可以查看
help('py.sys.exc_info')
结果:
exc_info() -> (type, value, traceback) Return information about the most recent exception caught by an except clause in the current stack frame or in an older stack frame.
代码验证
try py.list('x','y',1) catch e e.message if(isa(e,'matlab.exception.PyException')) e.ExceptionObject end end
结果:
ans = 'Python 错误 TypeError: list() takes at most 1 argument (3 given)' ans = Python tuple (不带属性)。 (<class 'TypeError'>, TypeError('list() takes at most 1 argument (3 given)',), None)
注意事项:
通常情况下,不能显式构造 matlab.exception.PyException 对象。 每当 Python 抛出异常时,MATLAB 都会自动构造一个PyException 对象。 PyException 对象是原始 Python 异常的封装。
参考资料
1.MATLAB 官方文档:https://ww2.mathworks.cn/help/