例如,在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
以来的语法错误。
那我该怎么做?
答案 0 :(得分:1)
在import语句中,你应该有一个这样的条目
from scipy.sparse.linalg.eigen.arpack import eigs, ArpackNoConvergence
所以except块看起来像这样
except ArpackNoConvergence as err:
k = len(err.eigenvalues)
if k <= 0:
raise AssertionError("Spurious no-eigenvalues-found case")
print err.eigenvalues, err.eigenvectors