0

我对 Python 比较陌生,我正在尝试学习关于类的一两件事。我对函数有一些经验,我试图了解类是如何工作的。我的问题是关于错误处理的。

通常使用函数,我可以执行一些操作,如果出现问题,我可以简单地返回 False 并在继续执行其余代码之前验证调用函数的位置。

我怎样才能在课堂上做到这一点?

我有一个带有简单方法的简单类,例如:

my_object = MyObj()
my_object.swim()

当我让 my_object “游泳”时,我希望能够以简单的方式处理错误或问题。例如:

在执行 def Swim(..) 期间:我希望能够返回 False 或引发不同的错误并在不完全中断应用程序的情况下处理它们。

即我想:

try:
    my_object.swim()
except:
    # it can not swim. I want it to tell me why or just tell me "False" so I can execute another codeblock and tell it to perhaps .walk_away()

我读到了 try/except 块、引发错误、它们是如何类的。但它并没有做我喜欢的事情,即尝试执行一个方法并处理该方法的执行结果(也许是真、假或其他错误?)

我怎样才能在 Python 中做到这一点?

谢谢你。

4

2 回答 2

5

您将执行以下操作:

class MayNotSwimException(Exception):
    def __init__(reason):
        self.reason = reason

class Person(object):
    def __init__(self, can_swim):
        self.can_swin = can_swim

    def swim(self):
        if self.can_swim:
            self.do_something()
        else:
            raise MayNotSwimException("I can't swim because...!")

    def walk_away(self):
        self.do_something_else()



p = Person(can_swim = False)
try:
    p.swim():
except MayNotSwimException as e: # In python 2.5-, use MayNotSwimException, e 
    print "That person can't swim because", e.reason
    p.walk_away()

异常可用于:

  • 改变控制流程(跳回一个try/except块)
  • 通过异常本身传输信息。这可以通过引发不同类型的异常(即,我们可以定义 aMayNotSwimBecauseDoesntWantException和 aMayNotSwimBecauseFeelsSleepyException并分别捕获它们)或通过异常对象本身的属性(e.reason)来实现。

查看文档以获得更详细的说明!

于 2012-10-27T22:03:48.017 回答
2

将 try..except 或其他形式的失败检查(和反应代码)放在游泳方法本身中。异常不一定是致命的,但我建议您将它们限制在可以使用正常条件的地方,以保持代码干净。

于 2012-10-27T22:00:50.593 回答