【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 |