Есть ли разница между "raise exception()" и "raise exception" без скобок?

279
31

Определение исключения без параметров:


class myException(Exception):
pass

Когда поднят, есть ли разница между:


raise myException

и


raise myException()

При попытке я не мог найти ни одного - это просто перегруженный синтаксис?

спросил(а) 2021-01-25T18:46:18+03:00 5 месяцев назад
1
Решение
267

Короткий ответ заключается в том, что оба raise MyException и raise MyException() делают то же самое. Эта первая форма автоматически создает ваше исключение.


соответствующий раздел из документов говорит: "raise оценивает первое выражение как объект исключения. Он должен быть либо подклассом, либо экземпляром BaseException. является классом, экземпляр исключения будет получен, когда это необходимо, путем создания экземпляра класса без аргументов."

Тем не менее, хотя семантика одна и та же, первая форма микроскопически быстрее, а вторая форма более гибкая (потому что вы можете передать ее аргументы, если это необходимо).


Обычный стиль, который большинство людей использует в Python (т.е. в стандартной библиотеке, в популярных приложениях и во многих книгах), использует raise MyException, когда нет аргументов. Люди просто создают исключение непосредственно, когда необходимо передать некоторые аргументы. Например: raise KeyError(badkey).

ответил(а) 2021-01-25T18:46:18+03:00 5 месяцев назад
117

Перейдите посмотреть ключевое слово raise в документах 6.9. Заявление о повышении цены

Он создает экземпляр myException

ответил(а) 2021-01-25T18:46:18+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема