Python:为什么我的函数返回None然后执行

时间:2017-07-06 14:10:21

标签: python return nonetype

所以,我有一个基本上这样做的功能:

import os
import json
import requests
from openpyxl import load_workbook

def function(data):
    statuslist = []
    for i in range(len(data[0])):
        result = performOperation(data[0][i])
        if result in satisfying_results:
            print("its okay")
            statuslist.append("Pass")
        else:
            print("absolutely not okay")
            statuslist.append("Fail" + result)
    return statuslist

然后,我调用这样的函数(我已经添加了错误处理以检查在我找到这个问题的原因后会发生什么),并且实际上对结果感到惊讶,因为函数返回None ,然后执行:

statuslist = function(data)
print(statuslist)
try:
    for i in range(len(statuslist)):
        anotherFunction(i)
        print("Confirmation that it is working")
except TypeError:
    print("This is utterly nonsense I think")

程序的输出如下:

None
This is utterly nonsense I think
its okay
its okay
its okay
absolutely not okay
its okay

函数末尾只有一个return语句,函数不是递归的,它非常直接和自上而下(但在此期间解析了大量数据)。

从输出日志中,似乎该函数首先返回None,然后正确执行。我很困惑,我无法通过互联网找到任何类似的问题(也许我说错了问题)。 即使代码中存在一些不一致,我仍然希望它返回[]。

将初始列表更改为statuslist = [" WTF"]后,返回为[]。 为了排除我在函数(数据)中执行的其他一些函数中修改了列表的事实,我多次更改了初始列表的名称 - 结果一直超出我的理解

我将非常感谢调试问题的提示。为什么函数首先返回值,并在执行后执行?

1 个答案:

答案 0 :(得分:0)

虽然无法编写代码同时显示我的代码中发生的全部代码,可读性,并且不会干扰公司的安全策略,但我已经重写了更简单的形式(原始代码是在我有3个月的编程经验时编写的),并且问题不再重现。我想有一些我已经误解的函数嵌套,这个重写的代码做得非常相似,正确地返回了我预期的列表。

感谢大家的时间和建议。

所以,答案似乎是:你不了解你自己的代码,让它变得更简单。