Ну простейший вариант:
# типы данных. Они могут быть классами, или описаниями вида typing.Tuple[int, str]
# так как ты не описал типы данных, я пишу тут заглушки typing.Any (т.е. что угодно)
# эти типы лучше описать в отдельном файле, который будет импортироваться остальными
Snaphot = typing.Any
PreparedSnapshot = typing.Any
SnapshotResult = typing.Any
# функции обработки. они могу быть раскиданы по отдельным файлам,
# но они должны импортить нужные модули, в т.ч. описание типов данных
# ни одна функция не должна выбрасывать исключения
def get_snapshot(site: str, name: str) -> typing.Optional[Snapshot]:
"Качает один снапшот с сайта и возвращает его, или None если была ошибка."
...
def prepare_snapshot(snapshot: Snapshot) -> typing.Optional[PreparedSnapshot]:
"Подготавливает один снапшот к обработке. Возвращает None при ошибке."
...
def process_prepared_snapshot(snapshot: PreparedSnapshot) -> typing.Optional[SnapshotResult]:
"Извлекает нужные сведения из одного снапшота и возвращает их как структуру данных, или None при неудаче."
...
# эта функция будет в главном запускаемом файле
# главный файл должен импортировать остальные
targets = zip(...) # ну или как ты там делаешь список
# и вот тут уже главный цикл
# вариант А - классический цикл
results: typing.List[SnapshotResult] = []
for site, name in targets:
snap = get_snapshot(site, name)
if snap is not None:
prepared = prepare_snapshot(snap)
if prepared is not None:
result = process_prepared_snapshot(prepared)
if result is not None:
results.append(result)
# вариант Б - более функциональный подход
# фильтрует коллекцию, отбрасывает None
def skipNone(items):
return filter(lambda item: item is not None, items)
results: typing.List[SnapshotResult] = list(skipNone(
map(process_prepared_snapshot, skipNone(
map(prepare_snapshot, skipNone(
get_snapshot(site, name) for site, name in targets
))
))
))
# в любом случае, у тебя есть список результатов results, делай с ним что хочешь.
К слову, у тебя очень кривой zip() в примере кода.
aList = "http://сайт-со-снепшотами.com"
bList = ['список', 'имен', 'для', 'снепшотов', 'и', 'так', 'далее']
for a, b in zip(aList, bList):
У тебя zip() даст
('h', 'список'), ('t', 'имен'), ('t', 'для'), ('p', 'снепшотов'), (':', 'и'), ('/', 'так'), ('/', 'далее'), ...