Сделайте что-нибудь, если в цикле for встречаются два исключения подряд - PullRequest
1 голос
/ 27 сентября 2019

Я пишу скрипт на python, который изменяется на несколько каталогов и анализирует различные файлы внутри них (в конце концов, я заполняю базу данных MySQL проанализированными данными).На самом деле я сначала пытаюсь изменить значение на /baseDirA/the/rest/is/the/same и проанализировать таблицы, которые я хочу.Если /baseDirA/the/rest/is/the/same не существует, я пытаюсь изменить на /baseDirB/the/rest/is/the/same и проанализировать те же таблицы, которые могу анализировать с /baseDirA/the/rest/is/the/same.

В моем коде, который уже слишком длинный для вставки сюда, У меня есть заявление try except, которое до сих пор печатает сообщение в случае, если dir (то есть /baseDirA/the/rest/is/the/same или /baseDirB/the/rest/is/the/same) не существует, как показано ниже

import os

# define the two baseDirs
dirs = 'baseDirA baseDirB'.split()

for basedir in dirs:
    try:
        cwd = f"{basedir}/the/rest/is/the/same"
        os.chdir(cwd)
        # Then I am doing the operations to parse different files
        # Below is the except statement, in case one of the directories does not exist
    except FileNotFoundError:
        print(f"WARNING: directory {cwd} does not exist")

У меня теперь тривозможные результаты

  1. /baseDirA/the/rest/is/the/same существует:

    1. Я затем cd в этот каталог и выполню необходимые операции
  2. /baseDirA/the/rest/is/the/same не существует, но существует /baseDirB/the/rest/is/the/same:

    1. I cd до /baseDirB/the/rest/is/the/same и выполнение необходимых операций
  3. Ни /baseDirA/the/rest/is/the/same, ни /baseDirB/the/rest/is/the/same не существует.

    1. В этом случае, с моим текущим оператором try except, я получу сообщение примерно так:
WARNING: directory /baseDirA/the/rest/is/the/same does not exist
WARNING: directory /baseDirB/the/rest/is/the/same does not exist

и в этомто есть, если я выполняю оператор except два раза подряд (без операций внутри оператора try), я хотел бы выполнить что-то еще.

Каков наилучший способ сделать это?Возможно, было бы лучше добавить еще один цикл for перед тем, который я иллюстрировал, просто чтобы проверить наличие обоих каталогов?Или я могу сделать что-то под оператором except?

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете break выйти из цикла for, если каталог существует, и добавить предложение else с кодом, который будет выполняться, если цикл не разорван из:

import os

# define the two baseDirs
dirs = 'baseDirA baseDirB'.split()

for basedir in dirs:
    try:
        cwd = f"{basedir}/the/rest/is/the/same"
        os.chdir(cwd)
        ...
        break
    except FileNotFoundError:
        print(f"WARNING: directory {cwd} does not exist")
else:
    print("No directories existed")
...