我正在尝试用Python移植一个可工作的MATLAB代码。我正在尝试创建大小为(rows
,cols
(的var
数组。如果引发异常,我会捕获它,然后再次尝试创建大小为(rows
,cols
-1(的var
数组。如果cols
变为零,那么我不能做任何其他事情,所以我rethrow
以前捕获的异常。
代码片段如下:
% rows, cols init
success = false;
while(~success)
try
var = zeros(rows, cols);
success = True;
catch ME
warning('process memory','Decreasing cols value because out of memory');
success = false;
var = [];
cols = cols - 1;
if (cols < 1)
rethrow(ME);
end
end
end
rethrow
的文档说明:
rethrow
保留原始异常信息,并使您能够追溯原始错误的来源,而不是从MATLAB执行方法的位置创建堆栈。
我的问题是:我应该用Python写什么才能与MATLAB的rethrow
获得相同的结果
在Python中,我写了以下内容。这足够吗?
# rows, cols init
success = False
while not success:
try:
var = np.zeros([rows, cols])
success = True
except MemoryError as e:
print('Process memory: Decreasing cols value because out of memory')
success = False
var = []
cols -= 1
if cols < 1:
raise(e)
对应的语法只是raise
:raise e
(注意:它不是一个函数(为自己添加堆栈跟踪条目。(在Python 2中,它取代了以前的堆栈,就像MATLAB的普通throw
一样,但Python 3扩展了它。(