Используйте попробовать и кроме, чтобы пропустить файл - PullRequest
0 голосов
/ 28 декабря 2018

Я определяю список файлов nc между двумя датами:

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

Предположим, что файл в середине ('20180102.nc') не существует.

Iя пытаюсь использовать исключение, пропустить его и продолжить с остальными, но я не могу управлять.

Вот мой код.Обратите внимание, что 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 ').

Как мне пропустить этот файл и продолжить объединение только тех файлов, которые существуют?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Вам нужно изменить 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
0 голосов
/ 28 декабря 2018

Если вы также рассмотрите другой способ, вот простой способ достичь вашей цели.

используйте это для работы системы

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]))
0 голосов
/ 28 декабря 2018

Ваша попытка / исключение находится на неправильном уровне, вы хотите попробовать чтение, и, если это не удалось, продолжите цикл.Это означает, что попытка / исключение должна быть внутри цикла:

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