怎么不返回调用函数?

时间:2014-05-09 10:40:19

标签: python function error-handling return

在python中,如果在被调用函数中发生某个事件,有一种方法不返回调用函数。例如,......

def acquire_image(sdkobject):

    ret = sdkobject.PrepareAcquisition()
    error_check(ret)

    ret = sdkobject.StartAcquisition()
    error_check(ret)

error_check是一个检查返回代码以查看sdk调用是否有错误的函数。如果它是一个错误消息,那么我不想回去获取和图像,但转到另一个功能重新启动sdk并从头开始。有这样做的pythonic方法吗?

3 个答案:

答案 0 :(得分:1)

返回错误并使用if条件检查返回的值是否有错误,如果有,则从调用函数调用重新初始化代码。

答案 1 :(得分:1)

如果出现问题,让error_check函数引发异常(如SDKError),然后在while循环中运行所有命令。

class SDKError(Exception):
    pass

# Perhaps define a separate exception for each possible
# error code, and make a dict that maps error codes to the
# appropriate exception.

class SDKType1Error(SDKError):
    pass

class SDKType5Error(SDKError):
    pass

sdk_errors = {
    1: SDKType1Error,
    5: SDKType5Error,
}

# Either return, if there was no error, or raise
# the appropriate exception
def error_check(return_code):
    if return_code == 0:
        return   # No error
    else:
        raise sdk_errors[return_code]


# Example of how to deal with specific SDKErrors subclasses, or a generic
# catch-all SDKError
def acquire_image(sdkobject):

    while True:
        try:
            # initialize sdk here
            error_check(sdkobject.PrepareAcquisition())    
            error_check(sdkobject.StartAcquisition())
        except SDKType1Error:
            # Special handling for this error
        except SDKError:
            pass
        else:
            break

答案 2 :(得分:1)

使用return获取快乐方案

返回调用函数是通过简单的returnreturn response完成的。

当一切顺利时,使用它来解决代码的典型运行。

当出现问题时抛出异常

如果出现问题,请致电raise Exception()。在许多情况下,您的代码不必显式执行,它会自行抛出异常。

您甚至可以使用自己的异常实例,并使用它们向调用者传递有关错误的更多信息。

我花了一些时间来学习这种方法,这使我的编码更简单,更短。

不关心你的调用代码会用它做什么

如果有问题,让你的功能完成任务或失败。

尝试在您的函数中考虑客户责任会弄乱您的代码,无论如何都不会是完整的解决方案。

要避免的事情

忽略谁在呼唤你

在OOP中,这是客户匿名的原则。只是服务请求而不关心,谁在打电话。

不要尝试使用Exceptions作为返回值的替换

有时候,人们会使用这个事实,Exception可以将一些信息传递给调用者。但这是反模式(总有例外。)