2014-11-24 2 views
1

Правильно ли вызывать эту функцию в некоторых исключениях? Правильно ли этот процесс? Лучше ли обрабатывать все исключения?Правильно ли эта функция?

def close_all(): 
     try: 
       ftp.close() 
     except: 
       pass 
     try: 
       tar.close() 
     except: 
       pass 
     try: 
       savelist.close() 
     except: 
       pass 
     try: 
       os.remove(tarname) 
     except: 
       pass 
     exit() 

Заранее благодарен.

+0

Почему ни один 'try', если вы собираетесь' pass' все исключения? –

+1

@BlueMoon Поскольку, если кто-то выбрасывает, следующий код не будет выполнен. Я бы порекомендовал не захватывать все исключения. –

+0

Голый 'except' [нахмурен] (http://blog.codekills.net/2011/09/29/the-evils-of--except--/) (по крайней мере *, используйте' except Exception'). Если вы используете Python 3.4, вы можете использовать ['contextlib.suppress'] (https://docs.python.org/3.4/library/contextlib.html#contextlib.suppress), чтобы сделать его более аккуратным. – jonrsharpe

ответ

1

Я думаю, что вы должны обрабатывать каждое исключение один за другим. Это сократит ваш код. Прежде всего обратите внимание на все исключения, которые ftp.close() и другие методы будут повышаться. Затем обрабатывайте их один за другим.

Пример:

>>> a = 5  # a is an integer 
>>> b = "Bingo" # b is a string 
>>> 
>>> def add_five(): 
     try: 
      c + 5 # c is not defined. NameError exception is raised 
     except NameError: 
      b + 5 # b is a string. TypeError exception is raised 
     except TypeError: 
      a + 5 # a is int. No exception is raised 
     except: 
      # This last except clause is just in case you forgot to handle any exception 
      pass 
>>> 
+0

Каким образом ловить больше исключений сделать код короче? –

+0

@TimCastelijns Ну, вам не придется писать инструкцию 'try' снова и снова. – xyres

+0

Да, хорошо. Я намекал на комментарий полковника выше –

Смежные вопросы