使用 try 和 except 跳过一个文件

Use try and except to skip a file

我正在定义 2 个日期之间的 nc 文件列表:

inlist = ['20180101.nc’, ‘20180102.nc’,  ‘20180103.nc’]

假设中间的文件(‘20180102.nc’)不存在

我正在尝试使用异常并跳过它并继续其余部分,但我无法管理。

这是我的代码。请注意,ncread(i)[0] 是一个读取一个变量的函数,然后在 xap:

中连接该变量
xap = np.empty([0])
try:
    for i in inlist:
        xap=np.concatenate((xap,ncread(i)[0]))
except IOError as e:
    print "I/O error({0}): {1}".format(e.errno, e.strerror)
    continue

此代码总是在尝试读取不存在的文件(‘20180102.nc’)时停止。

如何跳过此文件并继续仅连接存在的文件?

提前致谢。

你的try/except放错层了,你想尝试读取,失败时继续循环。这意味着 try/except 必须在循环内:

xap = np.empty([0])
for i in inlist:
    try:
        xap=np.concatenate((xap,ncread(i)[0]))
    except IOError as e:
        print "I/O error({0}): {1}".format(e.errno, e.strerror)
        continue

您需要将 IOError 更改为 FileNotFoundError:

xap = np.empty([0])
try:
    for i in inlist:
        xap=np.concatenate((xap,ncread(i)[0]))
except FileNotFoundError as e:
    print "FileNotFoundError({0}): {1}".format(e.errno, e.strerror)
    continue

如果您还考虑其他方法,这里有一个简单的方法可以达到您的目的。

用这个来操作系统

import os

列出当前目录中的所有文件(您应该更改为您的对象路径)

filelist=os.listdir("./")

inlist = ['20180101.nc', '20180102.nc',  '20180103.nc']
xap = np.empty([0])
for i in inlist:
   ##** only read the "i" in filelist** 
   if i in filelist: xap=np.concatenate((xap,ncread(i)[0]))