Numpy 错误处理

错误或异常是在程序执行期间发生的意外事件。它会影响程序指令的流程,并可能导致程序异常终止。

响应或处理异常称为异常处理。

NumPy 提供了多种方法来处理数组操作期间发生的异常。


处理 NumPy 中的浮点数错误

在 NumPy 中,seterr() 函数用于设置浮点数错误的处理方式。

它接受几个参数

  1. divide:指定除以零或无穷大的行为。
  2. over:指定浮点数溢出的行为。
  3. under:指定浮点数下溢的行为。
  4. invalid:指定无效浮点数运算的行为,例如0/0inf-infsqrt(-1)

注意:所有这些参数的可能值为“ignore”“warn”“raise”“call”。所有类型错误的默认行为都是“warn”


示例 1:NumPy seterr() 函数

import numpy as np

# set behavior for division by zero to 'raise'
np.seterr(divide='raise')

# divide array1 by array2
array1 = np.array([1, 2, 3])
array2 = np.array([0, 2, 0])
result = np.divide(array1, array2)

print(result)

输出

FloatingPointError: divide by zero encountered in true_divide

在此示例中,我们使用 np.seterr(divide='raise') 将除以零错误的默认行为设置为raise

这意味着当 np.divide() 在计算过程中遇到除以零时,它将引发 FloatingPointError 错误。

如果我们已将除以零的行为设置为

  • divide='ignore' - 它不会引发错误或打印警告消息,输出将是 [inf 1. inf]
  • divide='warn' - 它会打印警告消息并运行程序,输出将是 [inf 1. inf]

示例 2:NumPy seterr() 函数中的 over 参数

import numpy as np

# set behavior for floating-point overflow to 'raise'
np.seterr(over='raise')

calc1 = np.exp(1000)

print(calc1)

输出

FloatingPointError: overflow encountered in exp

在上面的示例中,我们将浮点数溢出的行为设置为raise

然后我们计算了 np.exp(1000),这会导致浮点数溢出,因为计算结果对于浮点数数据类型来说太大了。

这将引发一个异常:FloatingPointError: overflow encountered in exp

注意:如果我们设置 np.seterr(under='raise') 并计算 np.exp(-1000),这将引发一个异常:FloatingPointError: underflow encountered in exp


示例 3:NumPy seterr() 函数中的 invalid 参数

在 Numpy 中,我们可以在 seterr() 中使用 invalid 参数,在发生无效浮点数运算时引发异常。例如,

import numpy as np

# set the invalid parameter to 'raise'
np.seterr(invalid='raise')

# try taking the square root of a negative number
x = np.sqrt(-1)

# Output: FloatingPointError: invalid value encountered in sqrt

在这里,我们尝试对 -1 取平方根,这是一个无效的浮点数运算。

由于我们将 invalid='raise' 设置为raise,NumPy 将引发一个 FloatingPointError


NumPy try-catch 块

我们可以在 NumPy 中使用 try...except 块来处理错误。这是 try...except 的语法。

try:
    # code that may cause exception
except:
    # code to run when exception occurs

在这里,我们将可能引发异常的代码放在 try 块中。当 try 块中发生异常时,它会被 except 块捕获。

tryexcept 块必须协同工作以处理异常。

让我们看一个例子。

import numpy as np

array1 = np.array([1, 4, 3])
array2 = np.array([0, 2, 0])

# try to divide the arrays
try:
    result = array1/array2

except ZeroDivisionError as e:
    print("Error: Cannot divide by zero")

输出

runtimewarning: divide by zero encountered in divide

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战