【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 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 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?