java - 在 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.
所以我试图记录错误并继续迭代下一条记录。
EDIT
iterator.hasNext()
应该返回 true 或 false 但它的抛出错误
解决方案
如果你在循环中放置一个 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()
推荐阅读
- python - 尽管重用设置为 true,但 Tensorflow 创建新变量
- javascript - 我想在我输入 gmail id 时自动建议 @gmail.com
- javascript - 无法将数据(json)从事件处理程序传递给函数
- python - 如何使用 rpy2 进行预测?
- react-native - 在 React Native 组件中居中图像
- java - Function接口中的异常处理
- dictionary - 在 Haskell 中实现“toEnum”的问题
- json - 在 React 中将 JSON 数据映射到 Chart.js 条形图
- python - 如何将 HDFS 中的文本文件读入 Python,并将内容保存在字符串中?
- bluesnap - 使用托管付款字段时启用自动完成