2011-12-13 1 views
10

에서 예외가 x가 훼손되지 않은 것 같습니다 - 그것은 정의되지 않은 유지 또는 이전에 가졌던 값 유지 중. 할당의 오른쪽에서 예외가 발생할 때마다이 동작이 보장됩니까? 이것이 아주 기본적인 질문이라는 것을 알았지 만 할당이 어떻게 작동하는지에 대한 많은 정보를 찾을 수 없습니다. 일반적으로 할당과 관련된 모든 일이 발생하기 전에 전체 오른쪽이 항상 평가됩니까? setattr을 사용하거나 목록의 요소에 할당하거나 튜플을 압축 풀기 (예 : x, y = y, f()) 할 때도 마찬가지입니까?파이썬 : 다음 (파이썬 3.2.2) 다음 코드</p> <pre><code>def f(): raise Exception x = f() </code></pre> <p>을 시도 할 경우 할당

+2

을 제기하는 경우 할당의 왼쪽 터치되지 않습니다,이 (거기 동일합니다, 단지 PyPy 테스트) 일치,하지만 난 ' 그것이 분명해야한다는 어떠한 명시 적 진술도 보지 못했습니다. –

+0

글쎄, 공식 스펙이 없기 때문에 C, C++, Java, JavaScript 등의 사람들은 형식적인 스펙을 인용 할 수있다. 그러나 실용적으로, 구현 중 어느 것도 벗어나지 않으며, 그 행동은 벗어난 구현을 깨뜨릴만큼 충분히 중요합니다. – delnan

답변

12

파이썬 언어 참조이 지정

http://docs.python.org/reference/expressions.html#evaluation-order

파이썬은 왼쪽에서 오른쪽으로 식을 평가합니다. 과제를 평가하는 동안 오른쪽은 왼쪽보다 먼저 평가됩니다.

오른쪽이 평가 된 다음 왼쪽이 지정되고 할당 자체가 발생합니다. 따라서

def x(): 
    print "x" 
    fail() 

def y(): 
    print "y" 
    fail() 

x().a = y() 

은 "y"를 출력하고 NameError로 실패합니다. 절대 "x"를 올리거나 과제를 시도하지 않습니다.

0

과 관련된 Python 문서에서 오른쪽 사이드에서 예외가 발생하면 할당의 왼쪽이 만지지 않는다고 명시 적으로 말하지 않지만이 기사를 읽은 후에는 할당을 피하는 것은 예외를 발생시키는 것입니다.

결론 : 예외가 내가 아는 한

관련 문제