【问题标题】:Try/Except Not Catching Error [duplicate]尝试/除了未捕获错误[重复]
【发布时间】:2018-02-25 14:41:32
【问题描述】:

我正在尝试使用 try/except 来处理除以零错误,但 except 似乎没有捕捉到错误,我不知道为什么。

import numpy as np

A = np.array([[0.5,0,0.25,0.125,0.05],[0.5,0.5,0.5,0.5,0.5]])
Y = np.array([[0,1,0,1,1],[0,0,0,0,1]])
p = np.shape(A)[0]
q = np.shape(A)[1]
m = 2
try:
    dA = (-1 / m) * ((Y - A) / (A - np.square(A))) * (A * (1 - A)) 
except Exception:
    dA = np.zeros((p,q))

它返回除以零错误和在乘法中遇到的无效值(因为除以零错误),但它会终止程序而不是执行异常中的操作。

RuntimeWarning: divide by zero encountered in true_divide
  dA = (-1 / m) * ((Y - A) / (A - np.square(A))) * (A * (1 - A))
RuntimeWarning: invalid value encountered in multiply
  dA = (-1 / m) * ((Y - A) / (A - np.square(A))) * (A * (1 - A))

我尝试指定错误而不是仅指定异常,但这也不起作用。还有什么问题?

【问题讨论】:

  • 您在 np.zeros 中可能有除以零?
  • 你能创建一个minimal reproducible example吗?这听起来令人惊讶
  • @GerardH.Pille: 几乎没有:np.zeros 只是创建一个 0 填充矩阵
  • @Jean-FrançoisFabre 是对的,我们不知道您的变量的值,将特定的回溯添加到问题中也可能很有用。
  • @edit 这就是为什么我们需要minimal reproducible example。我厌倦了说“python 不工作”的问题。

标签: python numpy error-handling try-catch


【解决方案1】:

如果是numpy数组,除以零不会抛出异常,只会给出警告并给出inf值。

您可以使用numpy.isfinite 检查数组中的值是否是有限的(而不是 nan 或 inf)。

A = np.array([[0.5,0,0.25,0.125,0.05],[0.5,0.5,0.5,0.5,0.5]])
Y = np.array([[0,1,0,1,1],[0,0,0,0,1]])
p = np.shape(A)[0]
q = np.shape(A)[1]
m = 2
try:
    dA = (-1 / m) * ((Y - A) / (A - np.square(A))) * (A * (1 - A)) 
except Exception:
    dA = np.zeros((p,q))

if not np.isfinite(dA).all():
    dA = np.zeros((p,q))

如果你确定你的元素是 numpy 数组,你不需要例外:

dA = (-1 / m) * ((Y - A) / (A - np.square(A))) * (A * (1 - A)) 
if not np.isfinite(dA).all():
    dA = np.zeros((p,q))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2018-04-20
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2012-07-15
    • 2017-11-24
    相关资源
    最近更新 更多