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

时间:2017-10-24 04:06:02

标签: python exception try-catch

例如,在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以来的语法错误。

那我该怎么做?

1 个答案:

答案 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