【IDL】 批处理遇到错误时处理方法
很多童鞋喜欢用IDL进行批处理,而文件输入列表一般都采用file_search函数进行自动搜索(此函数详见 https://www.cnblogs.com/enviidl/p/16356480.html)。但是在某一个文件读写出错时,程序就会停止运行,而无法处理之后的数据。其实,在IDL中有完善的错误处理机制,具体可参考帮助中的Routines (by topic) > Error Handling章节。
这里使用Catch来实现错误处理,主要功能为:
-
遇到文件读取错误时,跳过本文件,继续处理后续文件;
-
可在控制台(或日志文件)中输出错误状态和信息。
为了模拟数据读取错误,这里新建了5个文本文件,其中1、2、4、5均为4列2行的整型数组,而3号文件为字符串,所以在读取时会遇到错误。
完整代码如下:
PRO testCatch COMPILE_OPT idl2 ;输入搜索路径,并搜索txt文件 path=FILE_DIRNAME(ROUTINE_FILEPATH('testCatch'))+$ PATH_SEP()+'TestFiles' files=FILE_SEARCH(path, '*.txt', COUNT=count) IF count EQ 0 THEN RETURN ;开始批处理 FOR i=0,count-1 DO BEGIN ;进行错误捕捉 CATCH, errorStatus IF (errorStatus NE 0) THEN BEGIN CATCH, /CANCEL ;控制台输出错误消息 PRINT, '读取文件出错:', !ERROR_STATE.MSG ;释放出错文件 FREE_LUN, lun ;跳过本次循环 CONTINUE ENDIF ;数据读取,因为data初始化为整型数组,在读取file3.txt时会出错 OPENR, lun, files[i], /GET_LUN data = INTARR(4,2) READF, lun, data FREE_LUN, lun ;读取成功时,在控制台打印消息 PRINT, '读取文件成功:', files[i] ENDFOR END |
注:代码中的输入路径为PRO文件所在路径的"TestCatch"文件夹。源码编码为GB2312。
控制台输出信息如下:
读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file1.txt 读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file2.txt 读取文件出错:READF: Input conversion error. Unit: 123, File: D:\IDLWorkspace84\Default\TestCatch\file3.txt 读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file4.txt 读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file5.txt |
测试代码下载地址:http://pan.baidu.com/s/1o6yWHBk
将下载的ZIP压缩包解压即可,保证PRO文件与"TestFiles"文件夹在同一路径即可。
除此之外,还有另外一种处理错误的方法。比如在使用ENVI 5.x新增的面向对象方法时,可以使用ERROR关键字来接收出错信息,从而Continue跳过循环。调试如下:
IDL> ;启动ENVI IDL> e=envi() ENVI> ;定义一个不存在的文件路径 ENVI> file='D:\abc.dat' ENVI> ;打开栅格图像,使用ERROR关键字 ENVI> Raster=e.OpenRaster(file, ERROR=err) ENVI> ;通过判断err是否为空进行错误处理,err不为空时即读取出错 ENVI> if err ne '' then print, '读取出错,错误提示为:'+err 读取出错,错误提示为:Unable to connect to the specified dataset. http://D/abc.dat |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)