访问数组触发索引越界时如何忽略报错并继续执行?
数组越界访问不中断程序的实现方法
当然可以,没什么复杂的,核心就是别让越界产生的错误逃逸到最外层打断执行流程,两种常用方案适配绝大多数会抛索引越界异常的编程语言,都是生产环境常用的写法:
- 前置边界校验(优先用,性能开销最小)
访问数组索引前先判断索引是不是在合法区间里,合法就正常取值,不合法直接返回你提前设好的默认值,从根上就不会触发越界错误。
拿Python举个例子:
像JavaScript本身访问不存在的数组索引根本不会抛错,只会返回arr = [1, 2, 3, 4, 5] target_idx = 6 # 索引在合法范围就取原值,否则返回None res = arr[target_idx] if 0 <= target_idx < len(arr) else Noneundefined,直接配合空值合并运算符给默认值就行,连判断都省了:const arr = [1,2,3,4,5] const res = arr[6] ?? 0 // 越界直接取默认值0,程序完全不会报错 - 局部异常捕获
要是不想每个访问数组的地方都写一遍判断,就把可能触发越界的代码包在对应语言的异常捕获块里,抓到越界异常的时候走默认逻辑就行,别把异常往外抛。
比如Java里的写法:int[] arr = {1,2,3,4,5}; int res = 0; try { res = arr[6]; } catch (ArrayIndexOutOfBoundsException e) { // 抓到越界异常直接给默认值,不向外抛错 res = -1; } // 后面的代码该怎么跑怎么跑,完全不会被中断
提醒一句:别图省事用全局异常拦截屏蔽所有数组越界错误,绝大多数越界都是代码逻辑写出来的bug,全局屏蔽之后出了问题根本找不到哪里错了,只建议在你明确知道索引可能合法、也可能不合法的局部业务场景用上面的方法处理。
内容的提问来源于stack exchange,提问作者user19200089
相关产品推荐
相关产品推荐

