gpt4 book ai didi

python - 处理异常断言到 Python 中的 NumPy 测试

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:03 26 4
gpt4 key购买 nike

理解某人的代码并遇到这个:

有一个函数:

 def some_func():
print("Hello")
assert(len(y)==len(p))
print("First assert")
assert(p.all()<=0.99999)
print("Second assert")
return 1

接下来,调用 assert_raises:

np.testing.assert_raises(AssertionError, some_func, np.asarray([1, 2, 3]), np.asarray([1, 2, 3, 4, 5]))

在输出中,我们只得到 Hello 没有异常消息:

Hello

接下来,调用函数assert_array_less:

np.testing.assert_array_less(some_func(np.asarray([1, 2, 3]), np.asarray([1, 2, 3])), np.inf)

在输出中,我们得到 Hello First 断言,然后是错误消息和 AssertionError 异常:

Hello
First assert
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-26-df1a32b4f5a0> in <module>()
9 np.testing.assert_raises(AssertionError, some_func, np.asarray([1, 2, 3]), np.asarray([1, 2, 3, 4, 5]))
10
---> 11 np.testing.assert_array_less(some_func(np.asarray([1, 2, 3]), np.asarray([1, 2, 3])), np.inf)

<ipython-input-26-df1a32b4f5a0> in some_func(a, b)
3 assert(len(a)==len(b))
4 print("First assert")
----> 5 assert(a.all()<=0.99999)
6 print("Second assert")
7 return 1

AssertionError:

问题:

为什么在 1 种情况下代码只是停止并且没有抛出异常,尽管它首先在 some_func () 中调用断言?

为什么第二个与第一个不同,并抛出异常?

最佳答案

根据您显示的错误消息,我猜测您的 some_func 的实际定义函数是:

def some_func(a, b):
print("Hello")
assert(len(a)==len(b))
print("First assert")
assert(a.all()<=0.99999)
print("Second assert")
return 1

鉴于此,这里是您的 assert 期间发生的事情的确切摘要。调用:

  • 你打电话

    np.testing.assert_raises(AssertionError, some_func, np.asarray([1, 2, 3]), np.asarray([1, 2, 3, 4, 5]))
    • np.testing.assert_raises函数依次调用

      some_func(np.asarray([1, 2, 3]), np.asarray([1, 2, 3, 4, 5]))
      • 第一行some_func运行并打印 Hello .
      • 接下来,some_func试图断言 a 的长度和 b是相同的。但是,a 的长度是 3,b 的长度是 5,所以断言失败。这会导致 AssertionError被抛出。此时,执行some_func终止,控制返回到 assert_raises .
    • assert_raises被告知期待一个AssertionError通过传递给它的第一个参数。它看到一个 AssertionError确实已经被抛出,所以从它的角度来看一切都很好。它处理 AssertionError (防止它创建将向您(用户)显示的错误消息),并执行 assert_raises正常结束。
  • 接下来你打电话

    np.testing.assert_array_less(some_func(np.asarray([1, 2, 3]), np.asarray([1, 2, 3])), np.inf)
    • 再一次,some_func 的第一行运行并打印 Hello .
    • 这一次,len(a)==len(b)==3 , 所以 assert通过和执行 some_func正常继续。
    • 下一个 some_func 的第三行运行并打印 First assert .
    • a 中的每个值是非零的,所以 a.all()True . bool 值 True数值为 1 .因此,a.all()<=0.99999False所以 assert失败。此时,AssertionError被提出并执行some_func被终止。
  • 这一次,some_func在顶级范围内运行(如果成功完成,np.testing.assert_array_less 将被调用,some_func 的返回值将传递给它)。不像上次some_func被调用没有封闭函数来处理 AssertionError那是提出来的。这意味着 AssertionError将传播并产生在 First assert 下方打印的可见错误消息.

这就是整个故事。

关于python - 处理异常断言到 Python 中的 NumPy 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53665493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com