Что происходит, когда я опускаю скобки при попытке отловить несколько исключений? - PullRequest
3 голосов
/ 20 июня 2011

Я только что попытался написать это:

try:
    # do something
except ValueError, IndexError:
    # do something else

А потом очень запутался, когда моя программа все еще выдавала IndexError, потому что я думал, что ловлю его.

Если он не перехватывает IndexError, что именно делает этот код? Кажется, это не синтаксическая ошибка.

Ответы [ 2 ]

7 голосов
/ 20 июня 2011

Поскольку эта ошибка / проблема настолько распространена, синтаксис для Python3 изменяется. Ваш код будет эквивалентен

try:
    # do something
except (ValueError, ) as IndexError:
    # do something else

Вы бы видели, что это явно неправильно.

Новый синтаксис работает до Python2.6

Это работает нормально

try:
    # do something
except (ValueError, IndexError):
    # do something else

но часто вы хотите что-то сделать с исключением, поэтому вы можете написать

try:
    # do something
except (ValueError, IndexError) as e:
    # do something with e
4 голосов
/ 20 июня 2011

Перехватывает ValueError с и присваивает пойманному исключению имя IndexErrorВы хотите это:

except (ValueError, IndexError):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...