1

嗨,我目前正在做这样的程序。

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() 中创建的对象中引发的。但我想将它发送到我的主程序并在那里打印错误 MyError 。是否可以这样做以及我应该如何编写它以便打印正确的异常文本,因为我将有几个不同的错误消息。

如果我来到 except 声明,我想打印“功能使用不正确”的消息。

4

2 回答 2

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

不鼓励(它捕捉到各种类似的东西KeyboardInterruptand SystemExit)......而不是:

try:
    do_something()
except ExceptionIKnowHowToHandle:
    ...

建议。

于 2014-08-19T17:22:56.440 回答
0

首先,永远不要做空白except。这将捕获所有错误,包括诸如KeyboardInterrupt- 因此您将无法 ctrl-c 退出程序。在这里你应该抓住MyError

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

try:
    ...
except MyError as e:
    print e.text 
于 2014-08-19T17:24:06.677 回答