Если я попробую следующий код (в Python 3.2.2),
def f():
raise Exception
x = f()
тогда кажется, что x
не тронут - он либо остается неопределенным, либо сохраняет то значение, которое имел ранее. Гарантируется ли такое поведение всякий раз, когда правая часть назначения создает исключение? Я понимаю, что это очень простой вопрос, но я не могу найти много информации о том, как именно работает назначение. В более общем смысле, всегда ли оценивается вся правая часть до того, как произойдет что-либо, касающееся назначения? Верно ли это даже при использовании setattr
, присвоении элементу списка или распаковке кортежей (т.е. что-то вроде x, y = y, f()
)?