2012-02-26 122 views
2

我的问题似乎很简单,但我没有找到任何帖子来解决这个问题。我需要自己的自定义异常类派生自ValueError打印预期类型(标准错误味精)以及输入的类型(与自定义文本)。Python:从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) 

我非常appreatiate任何这方面的帮助:

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异常添加到上面,提高我的自定义异常。非常感谢! 干杯,曼纽尔

+2

谁会提出错误?你的例子不起作用,因为int是一个内建类,不知道你的自定义异常。异常不会自动发生,因为有意识的决定,每个异常都会“手动”提出。 – 2012-02-26 14:55:49

+2

这甚至没有帮助。 'int'可以接受一个字符串。没有“预期”类型,因为python不是静态语言。 'int('5')'就好了 – Daenyth 2012-02-26 15:05:37

回答

1

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

为了抛出一个不同的异常,你必须包装int来捕获ValueError,然后引发你选择的异常(可能包括失败的值,如你所愿)。

0

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

class MyOwnException(ValueError): pass 

但是什么都不会做别人的代码提高您的例外 - 你只能提高它在你的。

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

非常感谢!然而,你怎么能只显示你的自定义错误消息,这意味着ing追溯:(最近呼叫最后): 文件“”,第4行,在 __main __。MoofiError:你做错了什么,傻瓜'谢谢! – user1233923 2012-02-26 16:32:45

+0

@ user1233923,如果你想提出_exception_,那就没有简单的方法。可能会有某种丑陋的黑客入侵,但这不值得。你为什么提出这个例外?你想在这里处理_user_错误吗?或_programmer_错误?如果你正在处理程序员错误,你不想撤销回溯。如果你正在处理用户错误,我认为你根本不想使用异常。 – senderle 2012-02-26 16:47:53