Использование нескольких попыток: кроме обработки ошибок не работает - PullRequest
0 голосов
/ 31 октября 2018

У меня есть список файлов, по которым я перебираю:

 condition = True
 list = ['file1', 'file2', 'file3']
   for item in list:
     if condition == True      
        union = <insert process>
      ....a bunch of other stuff.....

Предположим, что код отлично работает с файлами file1 и file3, но когда он попадает в файл file2, возникает ошибка ввода-вывода. То, что я хочу сделать, это обойти файл2, когда IOError выбрасывает переход к следующему элементу в списке. Я хочу использовать try: except метод, чтобы сделать это, но я не могу понять это правильно. Примечание: у меня есть общий try-catch в начале кода. Я не уверен, может ли это помешать иметь второй только для определенного раздела кода.

try:
    try:
      condition = True
      list = ['file1', 'file2', 'file3']
      for item in list:
        if condition == True      
          union = <insert process>
      ....a bunch of other stuff.....

    except IOError:
      continue
    .....a bunch more stuff.....
except Exception as e:
    logfile.write(e.message)
    logfile.close()
    exit()

В чем разница между «pass» и «continue» и почему вышеприведенный код не работает? Нужно ли добавлять более конкретную информацию к части IOError?

1 Ответ

0 голосов
/ 31 октября 2018

В чем разница между pass и continue ?

pass не работает, он говорит Python просто ничего не делать и переходить к следующей инструкции.

continue - операция цикла, она говорит Python игнорировать любой другой код, оставшийся в этой итерации цикла, и просто перейти к следующей итерации, как если бы он достиг конца блока цикла.

Например:

def foo():
    for i in range(10):
        if i == 5:
           pass
        print(i)

def bar():
    for i in range(10):
        if i == 5:
           continue
        print(i)

Первый напечатает 0,1,2,3,4, 5 , 6,7,8,9, но второй напечатает 0,1,2,3, 4 , 6 , 7,8,9, поскольку оператор continue заставит python вернуться к началу и не перейти к инструкции print, тогда как pass продолжит выполнение цикла в обычном режиме.

Почему вышеуказанный код не работает?

Проблема с вашим кодом заключается в том, что блок try находится вне цикла, как только возникает исключение внутри цикла, цикл завершается в этой точке и переходит к блоку except вне цикла. Чтобы это исправить, просто переместите блоки try и except в цикл for:

try:
  condition = True
  list = ['file1', 'file2', 'file3']
  for item in list:
     try:
        # open the file 'item' somewhere here
        if condition == True      
            union = <insert process>
        ....a bunch of other stuff.....

     except IOError:
         # this will now jump back to for item in list: and go to the next item
         continue
    .....a bunch more stuff.....
except Exception as e:
   logfile.write(e.message)
   logfile.close()
   exit()
...