【问题标题】:Using try-excepts in nested for loops在嵌套的 for 循环中使用 try-excepts
【发布时间】:2019-05-13 17:03:19
【问题描述】:

我有一个嵌套循环,我在其中对 3 维数组中的每个网格点执行计算。其中一些网格点会触发错误。我想计算每个可能的网格点并跳过那些触发错误的网格点。

我试过了:

with sharedmem.MapReduce(np=45) as pool:
  def calc_func(abc):
    for k in range(241):
      try:
        for j in range(int(datetime_range)):
            for l in range((abc), abc+1):  
              value = calc(pr[j,k,l], te[j,k,l], de[j,k,l])
              array[j,k,l] = value
      except (IndexError, ValueError):
        continue
  pool.map(cape_func, range(0, 479))

^ 上面计算了一些网格点,但我认为当 k 值被捕获到异常时,代码不会计算该 k 的其余网格点。

下面,我尝试添加另一个 try-except 块来迭代所有网格点。我认为这行不通-它似乎在无限循环。

with sharedmem.MapReduce(np=45) as pool:
  def calc_func(abc):
    for k in range(241):
      try:
        for j in range(int(datetime_range)):
          try:
             for l in range((abc), abc+1):  
               value = calc(pr[j,k,l], te[j,k,l], de[j,k,l])
               array[j,k,l] = value
          except (IndexError, ValueError):
            continue
      except (IndexError, ValueError):
        continue
  pool.map(cape_func, range(0, 479))

【问题讨论】:

  • 为什么不把 try catch 放在第三个内部 for 循环中的表达式周围?
  • 我认为您可能正在寻找 pass 声明而不是 continue。但我可能没有很好地理解你的问题。顺便说一句,你能不把它矢量化吗?
  • 看起来唯一可能引发IndexValue 错误的是calc 函数,因为您的所有循环都在一个范围内。为什么不直接用函数和数组赋值来包装 2 行代码呢?
  • 是的,可能你需要pass,因为我认为continue 退出for循环。
  • 感谢@JuliaBogutskaya,这可能是最好的解决方案。我不知道为什么我以前不这样做,有时你只需要另一双眼睛。仍然存在根本性错误,但我认为 try-except 正在工作。我将不得不对此进行进一步调查。

标签: python loops exception try-except


【解决方案1】:

我认为您可能正在寻找 pass 声明而不是 continue。但我可能没有很好地理解你的问题。在旁注中,你不能矢量化它吗?

看起来唯一可能引发IndexValue 错误的是calc 函数,因为您的所有循环都在一个范围内。为什么不直接用函数和数组赋值来包装 2 行代码呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2021-12-11
    • 2015-01-28
    • 2012-11-26
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多