簡體   English   中英

在python中,如何讓我自己的異常類在shell中打印出來?

[英]In python, how do I get my own exception classes to be pretty printed in the shell?

我應該在異常類中定義什么才能讓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__調用的結果。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM