2016-06-17 31 views
0

我有一个代码,我需要返回的值,但我认为我不能正确地将return声明。我需要IP地址的组合列表在python返回到调用函数现在不知道如何从函数返回值

def call_me(): 
    ACCESS_KEY= "XX" 
    SECRET_KEY= "XXXX" 
    regions = ['us-west-2','eu-central-1','ap-southeast-1'] 
    for region in regions: 
    instance_information = {} 
    ip_dict = {} 
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
    addresses_dict = client.describe_addresses().get('Addresses') 

    for address in addresses_dict: 

     if address.get('InstanceId'): 
      instance_information[address['InstanceId']] = [address.get('PublicIp')] 
     # print instance_information 

    dex_dict = client.describe_tags().get('Tags') 
    for dex in dex_dict: 
     if instance_information.get(dex['ResourceId']): 
      instance_information[dex['ResourceId']].append(dex.get('Value')) 
    for instance in instance_information: 

     if len(instance_information[instance]) == 2: 
      ip_dict[instance_information[instance][0]] = instance_information[instance][1] 
     else: 
      ip_dict[instance_information[instance][0]] = '' 
# print (json.dumps(instance_information,indent=4)) 
    #print type(instance_information) 
    ip_list = [i[0] for i in instance_information.values()] 
    print (ip_list) 

我不知道在哪里发生的,因为return ip_list声明,这个运行在3个地区

回答

0

可以前的定义ip_list与价值观的各区域列表for环和extend它:

ip_list = [] 
for region in regions: 
    instance_information = {} 
    # 
    # your code 
    # 
    ip_list.extend(i[0] for i in instance_information.values()) 
    print(ip_list) 
return ip_list 

如果你想在一个列表的列表,从地区保持值,则可以更换延长线的Wi th:ip_list.append([i[0] for i in instance_information.values()])

+0

我没有返回前2个区域的值,只有最后一个区域的IP返回 – Kittystone

+0

看到我的更新。 –

+0

尝试你的代码,米不能得到它的权利,有缩进问题 – Kittystone

0

你的问题不在于在哪里放置return语句。问题是您在for循环的每次迭代中都重新定义了ip_list,因此您没有任何信息可以返回它。

我不知道你想返回的值到底是什么格式,但也许你可以定义一个combined_ip_list作为变量在for循环之前的空单,追加的ip_list的值,而不是在结束打印出来的该循环,然后在循环外部返回该值。

+0

是的,正是先生。我需要form_list的'combined_ip_list'。你可以在这里帮助我的代码,我无法这样做 – Kittystone