【问题标题】:for loop inside def in python doesn't iteratepython中def内的for循环不会迭代
【发布时间】:2019-10-01 20:11:15
【问题描述】:

将 argeparse 传递为 us-east-1,us-east-2,us-east-3

# Setup commandline arguments
parser = argparse.ArgumentParser(description='using Terraform')
parser.add_argument(
    '-r',
    '--region',
    type=str,
    required=True,
    help='Region in which the ec2 need to be created')

然后尝试在每个区域进行for循环

for region_1 in ([region]):
  print(region_1)

对于 print(region_1) 它打印所有区域,但我希望它循环迭代并一次打印一个区域。请告诉我可以做什么

【问题讨论】:

  • region 是可迭代的吗?
  • 你怎么用括号括起来region。不管region 是什么,for 循环的结构只会迭代一次。试试for region_1 in region:
  • 你如何调用你的程序? region 是一个列表,还是一个带逗号的字符串?

标签: python


【解决方案1】:

如果您想更好地定义应该如何传递参数,这个answer 可以解决您的问题。

例如,您应该像--region 'us-east-1' 'us-east-2' 'us-east-3' 一样传递它。并使用nargs 定义您的参数选项,例如:

parser.add_argument(
    '-r',
    '--region', 
    nargs='+',
    type=str,
    required=True,
    help='Region in which the ec2 need to be created' 
)

在你的情况下,如果你想用逗号分隔一个字符串,只需这样做:

for r in region.split(","):
  print(r)

【讨论】:

    【解决方案2】:

    您可以通过在argparse 中使用-r/--regions 来实现nargs

    $ cat arg.py 
    import argparse
    
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument(
        '-r',
        '--regions', 
        dest='regions',
        nargs='+',
        required=True,
        help='foo bar'
    )
    
    args = parser.parse_args()
    
    for region in args.regions:
        print(region)
    
    $ python arg.py -r us_east us_west us_east1
    us_east
    us_west
    us_east1
    

    【讨论】:

      【解决方案3】:

      您正在迭代一个包含一个元素的列表:region[region] 是一个包含 region 的列表,就像 [1] 是一个包含 1 的列表一样。

      在迭代之前不要将该变量包装在另一个列表中:

      for region_1 in region:
      

      【讨论】:

        猜你喜欢
        • 2021-08-18
        • 1970-01-01
        • 2012-06-27
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多