捕获numpy ComplexWarning作为异常

时间:2019-02-21 18:43:57

标签: python numpy

考虑以下示例:

>>> import numpy as np
>>> a = np.array([1.0, 2.1j])
>>> b = np.array(a, dtype=np.float64)
/Users/goerz/anaconda3/bin/ipython:1: ComplexWarning: Casting complex values to real discards the imaginary part
  #!/Users/goerz/anaconda3/bin/python

如何才能将ComplexWarning作为例外?

我尝试过np.seterr,但这没有效果(因为它仅与浮点警告(例如下溢/上溢)有关)。

我还尝试了标准库中的with warnings.catch_warnings():上下文管理器,但是它没有任何作用。

1 个答案:

答案 0 :(得分:4)

使用stdlib warnings filter会使它们升高而不是打印:

>>> warnings.filterwarnings(action="error", category=np.ComplexWarning)
>>> b = np.array(a, dtype=np.float64)
ComplexWarning: Casting complex values to real discards the imaginary part

您可以使用warnings.resetwarnings将其重置为默认过滤器。