It would be more convenient to write:public function AddProduct($productId, $name, $price, $isCurrentlyInStock) { Contracts::Require(__FILE__, __LINE__, is_int($productId), 'The product ID must be an integer.'); Contracts::Require(__FILE__, __LINE__, is_string($name), 'The product name must be a string.');
instead of:public function AddProduct($productId, $name, $price, $isCurrentlyInStock) { if (!is_int($productId)) { throw new ArgumentException(__FILE__, __LINE__, 'The product ID must be an integer.'); } if (!is_int($name)) { throw new ArgumentException(__FILE__, __LINE__, 'The product name must be a string.'); }
"На самом деле за этим скрывается альтернативный поток управления".
Вот только нахрена это делать - ума не приложу
Топикстартер задался очень здравой задачей - выработать годное отношение к исключениям, и привёл практический пример.
Если руками - ну что-то вы там предприняли, но стек он всё равно бы освободил.
В питоне то же самое, но там и вызов функции - дорогая задача,
ярлыками можете свой лоб обклеить
Ответ на вопрос о скорости исчерпан.
По памяти всё тривиально - обработчик исключения освобождает всю цепочку кадров стека вплоть до помеченного кадра, никакой параллельный "коллстек" не нужен.
Даже как-то неловко за вас
from time import time
try:
b = 1/0
except Exception as e:
pint(e.__traceback__)