Python ValueError 继承了自定义异常行为
Posted
技术标签:
【中文标题】Python ValueError 继承了自定义异常行为【英文标题】:Python ValueError inherited custom exception behavior 【发布时间】:2021-10-18 16:36:38 【问题描述】:我定义我的基类Error
异常继承Exception
类,
然后我定义一个继承Error
的自定义异常:
class Error(Exception):
pass
class ValueTooSmallError(Error):
pass
number = 10 # put a number above this
while True:
try:
i_num = int(input("Enter a number: "))
if i_num < number:
raise ValueTooSmallError
break
except ValueTooSmallError:
print("This value is too small, try again!")
print("Ok.")
它按预期工作:
Enter a number: 1
This value is too small, try again!
Enter a number: 11
OK.
同理,ValueError
异常继承Exception
类,那我定义一个自定义异常继承ValueError:
class myValueError(ValueError):
pass
while True:
try:
i_num = int(input("Enter a number: "))
except myValueError:
print("this is a string, try again!")
raise myValueError
但在这种情况下:
Enter a number: 4
Enter a number: "asd"
Traceback (most recent call last):
File "test.py", line 21, in <module>
i_num = int(input("Enter a number: "))
ValueError: invalid literal for int() with base 10: '"asd"'
为什么我看不到myValueError
打印,而我看到的是ValueError
?
【问题讨论】:
首先您需要捕获 ValueError,然后您可以引发 myValueError。在提出 myValueError 之前,您无法捕获它。 【参考方案1】:在您的第二个 sn-p 中,它会引发 ValueError 异常,而不是 myValueError 异常。
【讨论】:
但这出乎意料,因为我要求提高myValueError
只有当它捕获到myValueError
时,您才要求它提高myValueError
。我认为您想要的是在捕获ValueError
时提高myValueError
。尝试将 except myValueError:
更改为 except ValueError:
看看这是否是您所期望的行为。
我做到了。现在它可以工作并且 myValueError 被 raised,但是我不明白如何 catch 它以上是关于Python ValueError 继承了自定义异常行为的主要内容,如果未能解决你的问题,请参考以下文章
如何确定“ValueError:元素不能位于父视图中”的原因? - Odoo 10.0e企业
如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。 ValueError:应定义 Dense 输入的最后一个维度。没有找到