在try / catch块中捕获异常后继续执行循环

时间:2019-11-12 12:13:29

标签: java loops exception try-catch

如果在 while(iterator.hasNext())期间发生异常,如何继续迭代循环?

所以我想做下面的事情。

            try {
                loop: while (iterator.hasNext())  // as excetion is on this line excetion will be catch by catch_2
                {
                    try {
                        Result res = (Result) iterator.next();
                        list.add(res);
                    } catch (Exception e) {                    // catch_1
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {                            // catch_2
                // goto start of the loop
                continue loop;
            }

Iterator<UserProvisioning> iterator = beans.iterator();
            while (iterator.hasNext()) {
                try {
                    UserProvisioning userProvisioning = (UserProvisioning) iterator.next();
                    System.out.println(userProvisioning.getFIRST_NAME());
                    list.add(userProvisioning);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    logger.error("Error occured...)
                }
            }

根据我的理解,iterator.hasNext()尝试通过将csv记录列映射到POJO字段来检查下一个元素是否存在,并且由于csv记录标题中的无效数据计数与记录文件不匹配,因此出错

java.lang.RuntimeException: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.

所以我正在尝试记录错误并继续迭代下一条记录。

编辑 iterator.hasNext()应该返回true或false,但是其抛出错误

1 个答案:

答案 0 :(得分:0)

如果将try-catch块放入循环中,除非您退出循环,否则它将继续循环到最后

for(Iterator<UserProvisioning> iter = beans.iterator(); iter.hasNext();) {
  try{
    UserProvisioning userProvisioning = iter.next();
    System.out.println(userProvisioning.getFIRST_NAME());
    list.add(userProvisioning);
  } catch(Exception ex) {
    logger.warn("An issue occurred when looping through user provisionings: " + ex.getMessage());

  }
}

上面的代码将设置一个迭代器并循环遍历。如果发生异常,由于没有调用break,因此它将记录并继续循环。

另外,由于您知道了迭代器的类型,因此在调用iter.next()

时无需进行强制转换