Как использовать ключевое слово "raise" в Python [дубликат]
этот вопрос уже есть ответ здесь:
Я прочитал официальное определение "поднять", но я все еще не совсем понимаю, что он делает.
проще говоря, что такое "поднять"?
пример использования поможет.
6 ответов
Он имеет 2 цели.
Он используется для повышения ваших собственных ошибок.
if something: raise Exception('My error!')
во-вторых, чтобы reraise настоящее исключение в обработчике исключений, чтобы его можно было обрабатывать дальше по стеку вызовов.
try:
generate_exception()
except SomeException as e:
if not can_handle(e):
raise
handle_exception(e)
raise
без каких-либо аргументов-это специальное использование синтаксиса Python. Это означает получить исключение и повторно поднять его. Если это использование можно было бы назвать reraise
.
raise
если нет выражений, raise повторно вызывает последнее исключение, которое был активен в текущем объеме.
если raise
используется отдельно без каких-либо аргументов, строго используется для reraise - ing. Если это сделано в ситуации, которая не находится при повторном вызове другого исключения, отображается следующая ошибка:
RuntimeError: No active exception to reraise
Вы можете использовать его для создания ошибок в рамках проверки ошибок:
if (a < b):
raise ValueError()
или обрабатывать некоторые ошибки, а затем передавать их как часть обработки ошибок:
try:
f = open('file.txt', 'r')
except IOError:
# do some processing here
# and then pass the error on
raise
raise
вызывает исключение. В некоторых других языках вместо этого используется глагол "throw".
Он предназначен для сигнализации ситуации ошибки; он отмечает, что ситуация является исключительной для нормального потока.
поднятые исключения могут быть пойманы снова кодом "вверх по течению" (окружающий блок или функция ранее в стеке), чтобы обработать его, используя try
, except
комбинации.
кроме того raise Exception("message")
и raise
Python 3 представил новую форму,raise Exception("message") from e
. Это называется цепочкой исключений, она позволяет сохранить исходное исключение (первопричину) с его обратной трассировкой.
Это очень похоже на внутренние исключения из C#.
Подробнее: https://www.python.org/dev/peps/pep-3134/