如何将“返回False”移植到类和“try / except”子句

时间:2012-10-27 21:52:27

标签: python python-2.7

我对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中执行此操作?

谢谢。

2 个答案:

答案 0 :(得分: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区块)
  • 通过异常本身传输信息。这可以通过引发不同类型的异常(即我们可以定义MayNotSwimBecauseDoesntWantExceptionMayNotSwimBecauseFeelsSleepyException并单独捕获它们)或通过异常对象本身的属性(e.reason)来实现。

have a look at the documentation获取更详细的解释!

答案 1 :(得分:2)

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