Exceptions · Исключения
When things go wrong
- A runtime error normally crashes the program.
- An exception is Python's signal that something went wrong.
- Exception handling lets you catch it and keep running.
Когда что-то идет не так
- Ошибка времени выполнения обычно приводит к сбою программы.
- Исключение — это сигнал Python о том, что что-то пошло не так.
- Обработка исключений позволяет перехватить ошибку и продолжить выполнение.
try / except
- Put risky code in a
try:block. - If it raises an exception, the
except:block runs instead of crashing. - If nothing goes wrong, the
exceptblock is skipped.
try / except
- Поместите рискованный код в блок
try:. - Если возникает исключение, блок
except:выполняется вместо сбоя. - Если ничего не пошло не так, блок
exceptпропускается.
try:
number = int("not a number")
except ValueError:
number = 0
print(number)
Catch the right error
- Name the type of error you expect:
except ValueError:. ValueErroris bad text for a number;ZeroDivisionErroris divide by zero.- Catching a specific type means you do not hide other bugs.
Перехват правильного ошибки
- Укажите тип ожидаемой ошибки:
except ValueError:. ValueError— это неверный текст для числа;ZeroDivisionError— деление на ноль.- Перехват конкретного типа означает, что вы не скрываете другие ошибки.
try:
print(10 / 0)
except ZeroDivisionError:
print("Cannot divide by zero")
finally and raise
- A
finally:block always runs, error or not — good for cleanup. raiselets you signal an error on purpose.raise ValueError("message")stops the code unless something catches it.
finally и raise
- Блок
finally:всегда выполняется, независимо от ошибок — хорошо подходит для очистки. raiseпозволяет вам намеренно сигнализировать об ошибке.raise ValueError("message")останавливает выполнение кода, если только его не перехватить.
try:
raise ValueError("bad value")
except ValueError as e:
print("Caught:", e)
finally:
print("Always runs")
Why it matters
- A robust program should not crash on bad input.
- Handling exceptions lets it warn the user and carry on.
- It also makes sure files and other resources are closed cleanly.
Почему это важно
- Надежная программа не должна давать сбой при плохом вводе.
- Обработка исключений позволяет ей предупредить пользователя и продолжить работу.
- Она также гарантирует чистое закрытие файлов и других ресурсов.
Common mistakes
- Catch a specific error (
except ValueError:), not a bareexcept:. - Put only the risky line inside the
try.
Распространенные ошибки
- Перехватывайте конкретную ошибку (
except ValueError:), а не голыйexcept:. - Помещайте внутрь блока
tryтолько рискованную строку.
Now you try
- Use
try/except(andraisein the last task). - Press Check answer to test your code.
Теперь попробуйте сами
- Используйте
try/except(иraiseв последнем задании). - Нажмите Check answer (Проверить ответ), чтобы протестировать свой код.
try / except
Code runs in try; if it fails, control jumps to except. · Код выполняется в блоке try; если он завершается ошибкой, управление переходит к блоку except.
Write safe_int(text) that returns int(text). If the text is not a valid number, catch the ValueError and return -1 instead. · Напишите функцию safe_int(text), которая возвращает значение int(text). Если текст не является допустимым числом, перехватите исключение ValueError и вместо этого верните значение -1.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Write divide(a, b) that returns a / b. If b is 0, catch the ZeroDivisionError and return None instead. · Напишите функцию divide(a, b), которая возвращает значение a / b. Если значение b равно 0, перехватите исключение ZeroDivisionError и вместо этого верните значение None.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Write withdraw(balance, amount). If amount is more than balance, raise ValueError. Otherwise return the new balance (balance - amount). · Напишите функцию withdraw(balance, amount). Если баланс amount больше суммы balance, совершите операцию raise ValueError. В противном случае верните новый баланс (значение balance - amount).
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.