Python:从ValueError派生的自定义异常类

Python:从ValueError派生的自定义异常类,python,Python,我的问题似乎很简单,但我没有找到任何关于这个问题的帖子。我需要从ValueError派生自己的自定义异常类来打印预期的类型(标准错误消息)以及输入的类型(带有自定义文本) 要添加到上述内容并通过内置ValueError引发自定义异常,请执行以下操作: class MyOwnException(ValueError): def __init__(self, value): self.value = value print "Error: Expected type", type(s

我的问题似乎很简单,但我没有找到任何关于这个问题的帖子。我需要从ValueError派生自己的自定义异常类来打印预期的类型(标准错误消息)以及输入的类型(带有自定义文本)

要添加到上述内容并通过内置ValueError引发自定义异常,请执行以下操作:

class MyOwnException(ValueError):
  def __init__(self, value):
    self.value = value
  print "Error: Expected type", type(self.value) #int
  print "Error type", self.value #how to return expected value type?

try:
    int('str')               
except ValueError as e:
    raise MyOwnException(e)
我非常感谢在这方面的任何帮助。非常感谢!
干杯,Manuel

函数将始终返回ValueError,而不是您的自定义类型


为了抛出不同的异常,您必须包装
int
以捕获ValueError,然后引发您选择的异常(可以根据需要包含失败的值)。

此代码创建一个新的异常类

class MyOwnException(ValueError): pass

但是,没有任何东西会让其他人的代码引发您的异常-您只能在自己的代码中引发它。

通常情况下,在引发自定义异常时,您必须捕获一个更通用的异常并重新引发另一个异常。那么比如说,

>>> class MoofiError(ValueError):
...     pass
... 
>>> try:
...     int('a')
... except ValueError:
...     raise MoofiError, 'you did something wrong, fool'
... 
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
__main__.MoofiError: you did something wrong, fool
>类MoofiError(ValueError):
...     通过
... 
>>>尝试:
...     int('a')
... 除值错误外:
...     “你做错了什么,傻瓜”
... 
回溯(最近一次呼叫最后一次):
文件“”,第4行,在
__莫菲罗:你做错了什么,傻瓜

谁将提出错误?您的示例不起作用,因为int是一个内置类,不知道您的自定义异常。异常并不是自动发生的,每个异常都是由于有意识的决定而“手动”引发的。这甚至于事无补
int
可以很好地接受字符串。没有“预期”类型,因为python不是静态语言
int('5')
很好,非常感谢!然而,你怎么能只显示你的自定义错误消息,这意味着你在主菜单第4行输入了回溯(最近一次调用):文件“”。Moofieror:你做错了什么,傻瓜谢谢@user1233923,如果您想引发异常,没有简单的方法。可能会有一些丑陋的黑客行为,但这不值得。你为什么提出这个例外?您正在尝试处理这里的用户错误吗?还是程序员错误?如果您正在处理程序员错误,您不想取消回溯。如果您正在处理用户错误,我认为您根本不想使用异常。基本问题:对异常进行子分类有什么帮助。它是否更改了命名空间。。。还是签名@nish如果不创建特定的异常类型,如何捕获特定的异常类型?
>>> class MoofiError(ValueError):
...     pass
... 
>>> try:
...     int('a')
... except ValueError:
...     raise MoofiError, 'you did something wrong, fool'
... 
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
__main__.MoofiError: you did something wrong, fool