如何处理包的特定异常(不是内置异常)



例如,在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

最新更新