在python中,如果在被调用函数中发生某个事件,有一种方法不返回调用函数。例如,......
def acquire_image(sdkobject):
ret = sdkobject.PrepareAcquisition()
error_check(ret)
ret = sdkobject.StartAcquisition()
error_check(ret)
error_check是一个检查返回代码以查看sdk调用是否有错误的函数。如果它是一个错误消息,那么我不想回去获取和图像,但转到另一个功能重新启动sdk并从头开始。有这样做的pythonic方法吗?
答案 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
获取快乐方案返回调用函数是通过简单的return
或return response
完成的。
当一切顺利时,使用它来解决代码的典型运行。
如果出现问题,请致电raise Exception()
。在许多情况下,您的代码不必显式执行,它会自行抛出异常。
您甚至可以使用自己的异常实例,并使用它们向调用者传递有关错误的更多信息。
我花了一些时间来学习这种方法,这使我的编码更简单,更短。
如果有问题,让你的功能完成任务或失败。
尝试在您的函数中考虑客户责任会弄乱您的代码,无论如何都不会是完整的解决方案。
在OOP中,这是客户匿名的原则。只是服务请求而不关心,谁在打电话。
有时候,人们会使用这个事实,Exception可以将一些信息传递给调用者。但这是反模式(总有例外。)