考虑以下示例:
>>> 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():
上下文管理器,但是它没有任何作用。
答案 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
将其重置为默认过滤器。