Обработка ошибок (try / except)
Как сохранить спокойствие программы, когда что-то идёт не так
"cat" в число. Обычно программа падает и останавливается. С помощью try / except ты можешь поймать эту проблему и позволить программе продолжить работу, показав понятное сообщение вместо страшной ошибки.
- объяснить, что такое исключение (ошибка во время выполнения),
- написать блок
try / except, чтобы поймать ошибку, - поймать нужную ошибку, например
ValueErrorилиZeroDivisionError, - сделать так, чтобы программа завершалась аккуратно, а не падала.
1. Что такое исключение?
Исключение — это ошибка, которая происходит во время работы программы. Python замечает, что не может сделать то, о чём ты просишь, поэтому останавливается и печатает сообщение об ошибке, которое называется traceback (трассировка).
Вот крошечная программа без защиты. Если человек введёт не целое число, она сломается:
number = int(input("Enter a number: "))
print("Double is", number * 2)
Если человек введёт cat вместо числа, Python упадёт с такой трассировкой:
Traceback (most recent call last):
File "program.py", line 1, in <module>
number = int(input("Enter a number: "))
ValueError: invalid literal for int() with base 10: 'cat'
Последняя строка, ValueError, — это имя исключения. У каждого вида ошибок есть имя. Как только ты знаешь имя, ты можешь её поймать.
2. Аналогия: страховочная сетка
Представь канатоходца высоко в воздухе. Чаще всего он проходит по канату спокойно. Но если он поскользнётся, страховочная сетка поймает его, и он не пострадает — представление продолжается.
try — это ты, идущий по канату. except — это сетка внизу. Если ничего не случается, сетка не нужна. Но если ты поскользнёшься (произойдёт ошибка), сетка тебя поймает, и программа продолжит работать, а не рухнет на землю.