2017-07-06 180 views
0

所以,我有一个函数,基本上做到这一点:的Python:为什么我的函数返回None,然后执行

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”]后,返回值为[]。 为了排除我在函数(数据)中执行的某些其他函数中修改了列表的事实,我已经多次更改了初始列表的名称 - 结果始终超出我的理解范围

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

+0

似乎没有足够的信息来重现此。你在第一个函数的for循环中是否指'data [0]'?如果你注释掉了很多代码,那么将其添加回来看看会发生什么? – doctorlove

+1

如果没有'data','performOperation()','satisfying_results'和'anotherFunction',就不能重现问题。 –

+0

不可复制。提供[mcve]。 –

回答

0

虽然无法编写代码,但它将同时呈现我的代码中发生的全部内容,可读性强,并且不会干扰公司的任何安全策略,但我已将其重写一个更简单的形式(原始代码已经写了,而我有3个月的编程经验),并且问题不再生成。我猜想有一些层次的函数被我误解了,这个重写的代码几乎完全一样,正确地返回了我预期的列表。

谢谢大家的时间和建议。

所以,答案似乎是:你不明白你自己的代码,使其更简单。

相关问题