Python - список пониманий, включая условия, такие как if и else / обработка ошибок - PullRequest
0 голосов
/ 15 сентября 2018

есть удобный способ включить условия в списки, чтобы сделать следующее:

index = [y for y, s in enumerate(data_time_filtered) if next0 in s]

Я хотел бы добавить следующие условия в определение индекса выше:

if next0 in s:
    data_filtered.append(data_time_filtered[index[0]])

else:
    missing_data.append(next0)

В настоящее время в моем коде происходит следующее:

IndexError: list index out of range

, когда значение не может быть найдено.Является ли это более эффективным для обработки с помощью else и если используются условия или есть другой / лучший способ обработки ошибок в этом случае?

EXTENSION:

data_time_filtered - это список строк, таких как:

https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/002/MYD021KM.A2018002.1330.006.2018003152138.hdf
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/004/MYD021KM.A2018004.1330.006.2018005220236.hdf
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/006/MYD021KM.A2018006.1330.006.2018007165439.hdf
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/009/MYD021KM.A2018009.1330.006.2018010190624.hdf

next0 являются строками в виде: /XXX/ например /002/

Функция индекса ищет строку в data_time_ с фильтром, где next0появляется и возвращает индекс, который используется для извлечения этой строки и добавления ее в другой список.

Проблема в том, что иногда строка, заданная next0, не содержится в списке, создающемсообщение об ошибке выше.

То, что я хотел бы, это:

Если индекс попадает в крестик такого числа, он должен добавить это число в список missing_data вместо взлома и выдачи ошибки.

ОБНОВЛЕНИЕ:

Я попробовал это:

try:
    index = [y for y, s in enumerate(data_time_filtered) if next0 in s]
    data_filtered.append(data_time_filtered[index[0]])

except IndexError:
    missing_data.append(next0)

, и это сработало :).Однако на более позднем этапе в другой строке происходит ошибка IndexError.все еще проверяю, как это разобраться

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Я пытался получить ваше требование - Дайте мне знать, помогает ли приведенный ниже код,

data_time_filtered = [
    'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/002/MYD021KM.A2018002.1330.006.2018003152138.hdf',
    'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/004/MYD021KM.A2018004.1330.006.2018005220236.hdf',
    'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/006/MYD021KM.A2018006.1330.006.2018007165439.hdf',
    'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/009/MYD021KM.A2018009.1330.006.2018010190624.hdf']

# combinations of exist & non-exist values
next0_list = ['/002/', '/004/', '/111/', '/222/']
data_filtered = list()
missing_data = list()

# for next0 in next0_list:
#     index = [data_filtered.append(s) for s in data_time_filtered if next0 in s]
#     if not index:
#         missing_data.append(next0)


index = [missing_data.append(next0) for next0 in next0_list if
         not [data_filtered.append(s) for s in data_time_filtered if next0 in s]]

print(missing_data)
print(data_filtered)
0 голосов
/ 16 сентября 2018

Вместо помещения условий в определение index получается, что обработка ошибок похожа на:

try:
    index = [y for y, s in enumerate(data_time_filtered) if next0 in s]
    data_filtered.append(data_time_filtered[index[0]])

except IndexError:
    missing_data.append(next0)

более практично, поскольку в часть except IndexError можно включить дополнительные условия или циклы.

0 голосов
/ 15 сентября 2018

Я не совсем понимаю, что вы пытаетесь сделать с этим кодом, но, возможно, это немного приблизит вас.

index = [data_filtered.append(data_time_filtered[s]) if next0 in s else missing_data.append(next0) for s in data_time_filtered]
...