如何跳过for循环中不在范围内的任何值

时间:2019-01-01 20:05:17

标签: python-3.x

我正在尝试创建3个嵌套的for循环,并跳过任何for循环中没有的任何值。我尝试了不同的方法,但还没有取得太大的成功。这是for循环:

for industry in string.ascii_uppercase:
    for code in range(1, 99):
        for year in range(1998, 2019):
            createCSV(industry, code, year)

问题在于存在无法提供数据的行业和代码值。该代码在代码= 3处中断,因为变量代码的原始值中缺少3。如果只是一个值,我可以使用Continue跳过它。

for industry in string.ascii_uppercase:
for code in range(1, 99):
    if code == 3:
        continue
    for year in range(1998, 2019):
        createCSV(industry, code, year)

但是行业和代码都有更多缺失的价值,我正在尝试寻找一种有效的方法。感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

如果您已经知道哪些值会导致错误,请避免循环访问它们。

missing_code_values=[3,4,5,6,7,83]
missing_ascii_values=['A','Z']
for industry in [x for x in string.ascii_uppercase if x not in missing_ascii_values]:
    for code in [x for x in range(1, 99) if x not in missing_code_values]:
        for year in range(1998, 2019):
            createCSV(industry, code, year)

如果您不知道,则可以使用try / except

for industry in string.ascii_uppercase:
    for code in range(1, 99):
        for year in range(1998, 2019):
            try:
                createCSV(industry, code, year)
            except: # mention specific exception if you can
                print("Skipping Industry-",industry," Code-",code," Year-",year)

答案 1 :(得分:0)

一种可能的方法可能是使用try/except子句:

for industry in string.ascii_uppercase:
    for code in range(1, 99):
        for year in range(1998, 2019):
            try:
                createCSV(industry, code, year)
            except Exception:
                print(f"Warning: unable to create CSV for industry '{industry}' for code '{code}' for year '{year}'")

,您仍然可以用Exception函数引发的特定异常类替换通用createCSV。例如,如果您知道当提供无效的createCSV值作为输入参数时ValueError将引发code,则用except Exception:替换except ValueError:。这将有助于避免一些潜在的陷阱(有关更多信息,请参见here)。

但是,如果可能的话,我建议改为:

  • 事先仅使用有效的code值检索可迭代对象,然后仅对它们进行循环,或者
  • 修改createCSV的编程代码,以使其在提供无效的code值时不会中断。

答案 2 :(得分:-3)

您可以检查Null in Python

 for industry in string.ascii_uppercase:
 for code in range(1, 99):
   if code is None:
     continue
 for year in range(1998, 2019):
   createCSV(industry, code, year)