例如,在scipy.sparse.linalg.eigs()
中,(这是ARPACK)如果不收敛,它可能会引发异常ArpackNoConvergence
。(见 https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigs.html#scipy.sparse.linalg.eigs)
现在在我的代码中,我确实
try:
# do some eigs() that doens't converge
except Exception as e:
print(e)
converged = e.eigenvalues
这行得通,但当然Exception
可以是任何东西。如果它不是预期的ArpackNoConvergence
,则它可能不包含 eigenvalues
属性。
问题是我能做些什么来捕获特定的异常?如果我将代码修改为
try:
# do some eigs() that doens't converge
except ArpackNoConvergence as e:
print(e)
converged = e.eigenvalues
这引发了自 NameError: global name 'ArpackNoConvergence' is not defined
年以来的语法错误。
那么我该怎么做呢?
在导入语句中,你应该有一个这样的条目
from scipy.sparse.linalg.eigen.arpack import eigs, ArpackNoConvergence
所以除了块看起来像这样
except ArpackNoConvergence as err:
k = len(err.eigenvalues)
if k <= 0:
raise AssertionError("Spurious no-eigenvalues-found case")
print err.eigenvalues, err.eigenvectors