Python:源自ValueError的自定义异常类

时间:2012-02-26 14:48:10

标签: python

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

class MyOwnException(ValueError):
  ...

try:
    raise MyOwnException ( int('str') ) #not sure what to do here, as I only want to
                                        #raise the exception if incorrect value type
except MyOwnException as e:
        print "Error: Expected type", e.expType() #int
        print "Error: Entered type", e.entType()  #string

添加到上面并通过内置的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)

我非常赞赏这方面的任何帮助。非常感谢! 干杯,曼努埃尔

3 个答案:

答案 0 :(得分:3)

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

>>> 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

答案 1 :(得分:1)

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

为了抛出不同的异常,你必须包装int以捕获ValueError,然后引发你选择的异常(可能包括你想要的失败值)。

答案 2 :(得分:0)

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

class MyOwnException(ValueError): pass

然而,没有任何东西会让别人的代码提出异常 - 你只能在你的代码中提出它。