gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:28:46 26 4
gpt4 key购买 nike

如果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,但会抛出错误

最佳答案

如果你在循环中放置一个 try-catch block ,它将继续循环到最后,除非你打破它

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() 时无需对其进行强制转换

关于java - 在 try/catch block 中捕获异常后继续执行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58818517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com