将类中的错误引发到main()

时间:2014-08-19 17:19:52

标签: python exception try-catch user-defined raise

您好我正在做这样的程序。

class MyError(Exception):
    def __init__(self, text = "Correct")
        self.text = text
    def __str__(self):
        return (self.kod)

class Atom(self):
.
.
.
    try:
        function()
    else:
        raise MyError("Incorrect use of function")


def main():
    try:
        a = Atom()
    except:
        # Here i want to print the error that was raised

我认为我理解的是,在Atom()中创建的对象中引发了错误。 但我想将它发送到我的主程序并在那里打印错误MyE​​rror。 是否可以这样做,我应该如何编写它以便打印正确的异常文本,因为我将有几个不同的错误消息。

如果我来到except语句,我会想要得到消息"错误地使用函数"打印。

2 个答案:

答案 0 :(得分:0)

看起来你非常接近:

class MyError(Exception):
    def __init__(self, text = "Correct")
        self.text = text
    def __str__(self):
        return (self.kod)

class Atom(self):
.
.
.
    try:
        function()
    except:  # try: ... else: raise ... seems a bit funky to me.
        raise MyError("Incorrect use of function")


def main():
    try:
        a = Atom()
    except Exception as err:  # Possibly `except MyError as err` to be more specific
        print err

诀窍在于,当您捕获错误时,您希望使用as子句将异常实例绑定到名称。然后你可以打印它,查看它的属性,重新加注或者用你选择的任何东西。


请注意,此代码仍然不“干净”。通常,您希望尽可能地限制异常处理 - 仅捕获期望看到的异常以及您知道如何处理的异常。否则,您有时可能会很难掩盖代码中的错误。因此:

try:
    do_something()
except:
    ...
不鼓励

(它抓住了KeyboardInterruptSystemExit等各种各样的东西......相反:

try:
    do_something()
except ExceptionIKnowHowToHandle:
    ...
建议

答案 1 :(得分:0)

首先,从不做空except。这将捕获所有错误,包括KeyboardInterrupt之类的错误 - 因此您将无法从程序中删除ctrl-c。在这里你应该抓住MyError

except子句还允许您将实际异常分配给变量,然后可以打印或执行其他任何操作。所以你可以这样做:

try:
    ...
except MyError as e:
    print e.text