2017-07-06 59 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個月的編程經驗),並且問題不再生成。我猜想有一些層次的函數被我誤解了,這個重寫的代碼幾乎完全一樣,正確地返回了我預期的列表。

謝謝大家的時間和建議。

所以,答案似乎是:你不明白你自己的代碼,使其更簡單。