【问题标题】:Get raised error in a class to main()在 main() 的类中引发错误
【发布时间】:2014-10-12 21:42:54
【问题描述】:

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

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 语句,我想打印“函数使用不正确”的消息。

【问题讨论】:

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


    【解决方案1】:

    看来你已经很接近了:

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

    建议。

    【讨论】:

    • 是的,你总是会得到最后一个错误——当然,你总是可以将原始错误作为最后一个错误的属性添加到你的异常处理中。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 2015-06-16
      • 2021-11-19
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2022-01-14
      • 2019-09-29
      相关资源
      最近更新 更多