请问如何recover一个for循环中的错误
来源:1-2 课程资源获取方式 - 非常重要!!!

kanokano
2020-11-12
如果一个for循环中有错误的话,在外层defer recover一次的话,虽然可以捕获一次错误,但是程序还是会被终止。如果在for循环内部循环一次就defer recover一次的话,连错误都捕获不到。请问老师出现这个情况的原因是什么?还有我要如何用recover配合for循环来使用,保证即使for循环内部错误不止一个,我也能全部捕获到,而且for循环还不能被终止,因为如果用for循环去遍历一个空接口的切片的话,是很有可能出现异常的,而且可能还会不止一次,但是我的程序又必须要执行完这个for循环。
写回答
1回答
-
这样来理解把,你现在是写python代码,一个try except只能catch住你try里面的代码异常,而且你也得知道,如果你是try住的异常,是没有理由让他执行后面的逻辑的,异常本身的就没有捕获住之后还应该执行后续逻辑的道理,你说的能处理后续的逻辑是错误不是异常,我这里给你举例一段代码来说吧:
上这一行代码会出现异常,但是你会指望出现异常以后还能运行下一行代码吗?如果是这样你这就不叫异常,而是你能预见到可能会出现的错误,所以你会这样改
所以你应该想问题的是如果recover只捕获指定的代码,可以这样做:把for循环中的逻辑放入到一段函数中去执行然后在这个函数中去recover,参考下面的代码:
package main import "fmt" func main() { for i := 0;i<10; i++ { func() { defer func() { if err := recover(); err != nil { //产生了panic异常 fmt.Println(err) } }() //别忘了(), 调用此匿名函数 if i == 3 { d := make([]string, 0) fmt.Println(d[0]) }else{ fmt.Println(i) } }() } }
00
相似问题