折腾:
【未解决】百度OCR自动化操作游戏率土之滨从首充豪礼弹框页到真正支付页
期间,经过调试
之前的:
isRealPay = self.isRealPayPopupPage_multipleRetry()
返回竟然,不是以为的false,而是None

所以先去解决这个问题
发现还真的是之前函数有问题
utils/common_utils.py
def multipleRetry(functionInfoDict, maxRetryNum=5, sleepInterval=0.1, isShowErrWhenFail=True, isRespFullRetValue=False): 。。。 if doSuccess: if isRespFullRetValue: finalReturnValue = respValue else: finalReturnValue = doSuccess break 。。。
去改为:
if isRespFullRetValue: finalReturnValue = respValue else: finalReturnValue = doSuccess if doSuccess: break
然后重新调试看看
然后就可以了:

返回False,而不是None了
最后完整代码:
def multipleRetry(functionInfoDict, maxRetryNum=5, sleepInterval=0.1, isShowErrWhenFail=True, isRespFullRetValue=False):
"""do something, retry if single call failed, retry mutiple time until max retry number
Args:
functionInfoDict (dict): function info dict contain functionCallback and [optional] functionParaDict
maxRetryNum (int): max retry number
sleepInterval (float): sleep time (seconds) of each interval when fail
isShowErrWhenFail (bool): show error when fail if true
isRespFullRetValue (bool): whether return full return value of function call
Returns:
isRespFullRetValue=False: bool
isRespFullRetValue=True: bool / tuple/list/...
Raises:
"""
finalReturnValue = None
doSuccess = False
functionCallback = functionInfoDict["functionCallback"]
functionParaDict = functionInfoDict.get("functionParaDict", None)
curRetryNum = maxRetryNum
while curRetryNum > 0:
if functionParaDict:
# doSuccess = functionCallback(**functionParaDict)
respValue = functionCallback(**functionParaDict)
else:
# doSuccess = functionCallback()
respValue = functionCallback()
doSuccess = False
if isinstance(respValue, bool):
doSuccess = bool(respValue)
elif isinstance(respValue, tuple):
doSuccess = bool(respValue[0])
elif isinstance(respValue, list):
doSuccess = bool(respValue[0])
else:
Exception("multipleRetry: Not support type of return value: %s" % respValue)
if isRespFullRetValue:
finalReturnValue = respValue
else:
finalReturnValue = doSuccess
if doSuccess:
break
time.sleep(sleepInterval)
curRetryNum -= 1
if not doSuccess:
if isShowErrWhenFail:
functionName = str(functionCallback)
# '<bound method DevicesMethods.switchToAppStoreSearchTab of <src.AppCrawler.AppCrawler object at 0x1053abe80>>'
logging.error("Still fail after %d retry for %s", maxRetryNum, functionName)
# return doSuccess
return finalReturnValue
另外去更新之前的:
Python常用代码段
中的代码:
multipleRetry
已更新:
