TypeError:my_function()需要正好4个参数(给出5个)

问题描述:

我不知道它为什么不起作用;它返回此错误:TypeError:my_function()需要正好4个参数(给出5个)

TypeError: create_selected_properties_json_doc() takes exactly 4 arguments (5 given) 

代码:

def another_function(): 

    confirmed_diagnostic_keys = [some, keys] 
    generalized_stage_keys = [some, keys] 
    stage_acording_to_uicc_keys = [some, keys] 

    self.create_selected_properties_json_doc(self, form, 'hallelluja', confirmed_diagnostic_keys) 
    self.create_selected_properties_json_doc(self, form, 'mashalla', generalized_stage_keys) 
    self.create_selected_properties_json_doc(self, form, "heheeyy", stage_acording_to_uicc_keys) 


def create_selected_properties_json_doc(self, form, json_obj_key, form_element_ids): 

     # Create an empty dictionary 
     json_obj[json_obj_key] = {} 

     #Loop through the keys in list 
     for key in form_element_ids: 

      #check if the keys matches any of form's key 
      if key in form: 

       #Add values of form elements to the dictionary properties 
       json_obj[json_obj_key][key] = form[key] 
      else: 
       # Otherwise add "Jo" to the respective dictionary property 
       json_obj[json_obj_key][key] = 'NO' 

     return json_obj 
+0

'self'隐式传递,您不需要手动执行 - 您实际上正在调用'Class.method(self,self,...)'。 – jonrsharpe 2014-09-12 10:32:38

不通过self作为第一个参数:

self.create_selected_properties_json_doc(form, 'hallelluja', confirmed_diagnostic_keys) 

self.create_selected_properties_json_docbound method。当被调用时,self会自动作为第一个参数传递给create_selected_properties_json_doc,所以您应该只传递其余的参数。


为了避免NameError: global name 'json_obj' is not defined,您需要定义json_objcreate_selected_properties_json_doc

def create_selected_properties_json_doc(self, form, json_obj_key, form_element_ids): 
    json_obj = dict() 
    # Create an empty dictionary 
    json_obj[json_obj_key] = {} 

存储由create_selected_properties_json_docanother_function返回的字典,它分配给一个变量:

def another_function(): 

    confirmed_diagnostic_keys = [some, keys] 
    generalized_stage_keys = [some, keys] 
    stage_acording_to_uicc_keys = [some, keys] 

    json1 = self.create_selected_properties_json_doc(
     form, 'hallelluja', confirmed_diagnostic_keys) 
    json2 = self.create_selected_properties_json_doc(
     form, 'mashalla', generalized_stage_keys) 
    json2 = self.create_selected_properties_json_doc(
     form, "heheeyy", stage_acording_to_uicc_keys) 
+0

我必须在函数another_function()返回什么值,因为如果我返回json_obj它显示我的错误:NameError:全局名称'json_obj'没有定义,因为自我参数我没有paas在函数create_selected_properties_json_doc() – KosovoDev 2014-09-12 12:35:12

+0

什么是'json_obj'?它没有在您发布的任何代码中定义。 – unutbu 2014-09-12 12:45:03

+0

json_obj是函数create_selected_properties_json_doc()的返回值,这意味着它是一个json对象。所以我不知道如何在another_function()返回json_obj – KosovoDev 2014-09-12 12:49:00

当传递参数给一个函数时避免传递自我(这是对象引用并自动传递自我s隐式传递,你不需要手动完成。

例如:它只是为了让你明白。

def binary_search(self,input_array,left_index,right_index): 
    mid=left_index+(right_index-left_index)/2 
    return mid 
def call_function(self,*arg): 
    self.binary_search(input_array,left_index,right_index) #self is not 
                  passed