从显式返回FAL的函数接收None

2024-09-28 19:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个遍历测试并执行它们的函数。在执行每个测试之前,它调用函数confirm_execute(),检查测试是否已取消。confirm_execute()如下所示(请原谅调试消息的混乱):

def confirm_execute(self):
    self._update_hil_status()
    status = self.hil_status['status']
    print 'STATUS =', status

    if status == 'TESTING':
        return True
    elif status == 'CANCEL':
        print '##### Cancelling #####'
        return False

    elif status == 'REQUEST_STOP':
        print '##### Stopping tests #####'
        self._set_hil_status(status='STOPPED')
    elif status == 'STOPPED':
        time.sleep(5)
    elif status == 'RESUME':
        print '##### Resuming tests #####'
        self._set_hil_status(status='TESTING')
    else:
        print '##### Invalid status {} - setting stop status #####'.format(status)
        self._set_hil_status(status='STOPPED')

    self.confirm_execute()  # only exit if status is testing or cancel

在执行测试之前检查权限的函数部分如下:

allow = self.status.confirm_execute()
if allow:
    print 'continue: {}'.format(allow)
    # run a test
else:
    print 'cancel: {}'.format(allow)
    # clean up

问题是:当我将status设置为CANCEL时,confirm_execute似乎返回None,而不是False。当我停止一组测试,然后尝试取消时,控制台上的输出如下:

STATUS = REQUEST_STOP
##### Stopping tests #####
SETTING STOPPED
STATUS = STOPPED
STATUS = STOPPED
STATUS = CANCEL
##### Cancelling #####
cancel: None

注意,我得到了##### Cancelling #####消息,这意味着我应该返回False。然而,所接收的allow的值似乎是None。你知道吗

我犯了什么简单的错误?你知道吗


Tags: selffalseexecuteifstatustestscancelconfirm
2条回答

递归在这里不是合适的解决方案。每次结果不是CANCEL或TESTING时,函数都会调用自己;但是您不会返回那些嵌套调用的值,因此它们会丢失。你知道吗

与其递归,不如将整个函数放在while True循环中—这样它将继续循环,直到到达其中一个返回案例。你知道吗

函数只显式返回TESTINGCANCEL的值。 否则它只打印东西,调用自己,不显式返回任何东西。这意味着它隐式返回None。你知道吗

你想要的是return self.confirm_execute()。你知道吗

相关问题 更多 >