Хорошо, поэтому есть несколько вещей, которые необходимо объяснить где.
Для чего используется try-except?
Он используется для обнаружения ошибок, возникающих в программе. Любой код, который может вызвать исключение, вставляется в оператор try
, а под этим оператором - любое количество операторов except
с любой единственной ошибкой, которую вы хотите перехватить.
try:
user_input = int(input('Give me a number: '))
except ValueError:
print('That is not a number!')
Когда следует использовать try-except?
Не рекомендуется использовать try-except
в каждой строке кода, которая может вызвать ошибку, потому что это может быть половиной или больше. Итак, когда вы должны его использовать? Просто задайте этот вопрос: Хочу ли я выполнить какое-либо настраиваемое действие при появлении этой ошибки? Если ответ: да , вы можете go.
Catching Exception
или пустой except
Как я вижу в вашем примере, вы используете пустой except
. Использование пустого оператора except
будет перехватывать каждую отдельную ошибку, возникшую в окруженном коде, что похоже (но не то же самое), что и перехват Exception
. Класс Exception
является суперклассом каждого встроенного исключения в среде Python, которое не является выходом из системы ( читайте здесь ), и, как правило, это плохая практика, чтобы перехватить все исключения с помощью except:
или Exception
с except Exception:
. Почему? Потому что вы не позволяете пользователю (или даже вам, программисту) знать, какую ошибку вы обрабатываете. Например:
fruits = ['apple', 'pear', 'banana']
try:
selection = fruits[int(input('Select a fruit number (0-2): '))]
except Exception:
print('Error!')
# But wait, are you catching ValueError because the user did not input a number,
# or are you catching IndexError because he selected an out of bound array index?
# You don't know
Перехват нескольких исключений
Основываясь на предыдущем примере, вы можете использовать несколько операторов try-except
, чтобы различать, какие ошибки возникают.
fruits = ['apple', 'pear', 'banana']
try:
selection = fruits[int(input('Select a fruit number (0-2): '))]
except ValueError:
print('That is not a number')
except IndexError:
print('That fruit number does not exist!')
Группировка исключений
Если есть два конкретных исключения, которые вы хотите использовать для одной и той же цели, вы можете сгруппировать их в tuple
:
fruits = ['apple', 'pear', 'banana']
try:
selection = fruits[int(input('Select a fruit number (0-2): '))]
except (ValueError, IndexError):
print('Invalid selection!')
Ваш случай
На основе этой информации добавьте эти блоки try-except
в свой код и посмотрите, какие возможные ошибки могут возникнуть во время его выполнения, задав ранее рекомендованный вопрос Хочу ли я выполнить какое-либо настраиваемое действие с этой ошибкой?
Дополнительно
- Есть
try-except-else
операторов. См. здесь - Есть инструкции
try-except-finally
. См. здесь - Вы можете объединить их все в операторе
try-except1-except2...exceptN-else-finally
. - Я рекомендую вам ознакомиться со встроенными ошибками, зачем это практиковать!