2016-01-08 48 views
3

我應該在我的異常類中定義什麼,以便shell以有意義的方式打印它?我試過如下:在python中,我如何讓自己的異常類在shell中打印出來?

#!/usr/bin/env python3.4 

class MyError(Exception): 
    def __init__(self, myparam1, myparam2): 
     self.myparam1 = myparam1 
     self.myparam2 = myparam2 


    def __str__(self): 
     return 'param1: {0}, param2: {1}'.format(self.param1, self.param2) 


    def __repr__(self): 
     return self.__str__() 


if __name__ == "__main__": 
    raise MyError(1, 2) 

這給了我

Traceback (most recent call last): 
    File "./tmp.py", line 18, in <module> 
    raise MyError(1, 2) 
__main__.MyError 

我想看到什麼存在__str__調用的結果。

回答

3

Exception中的__init__方法接受異常消息作爲參數。你可以從你的__init__方法中調用它。

class MyError(Exception): 
    def __init__(self, param1, param2): 
     super(MyError, self).__init__('param1: {0}, param2: {1}'.format(param1, param2)) 

>>> raise MyError(1,2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
__main__.MyError: param1: 1, param2: 2 

或者,如果你想依靠異常的__str__方法來提供信息,您可以通過異常實例本身作爲消息傳遞給超__init__

class MyError(Exception): 
    def __init__(self, myparam1, myparam2): 
     super(MyError, self).__init__(self) 
     self.myparam1 = myparam1 
     self.myparam2 = myparam2 
    def __str__(self): 
     return 'param1: {0}, param2: {1}'.format(self.myparam1, self.myparam2) 
    def __repr__(self): 
     return str(self) 
相關問題