에서 예외가 x
가 훼손되지 않은 것 같습니다 - 그것은 정의되지 않은 유지 또는 이전에 가졌던 값 유지 중. 할당의 오른쪽에서 예외가 발생할 때마다이 동작이 보장됩니까? 이것이 아주 기본적인 질문이라는 것을 알았지 만 할당이 어떻게 작동하는지에 대한 많은 정보를 찾을 수 없습니다. 일반적으로 할당과 관련된 모든 일이 발생하기 전에 전체 오른쪽이 항상 평가됩니까? setattr
을 사용하거나 목록의 요소에 할당하거나 튜플을 압축 풀기 (예 : x, y = y, f()
) 할 때도 마찬가지입니까?파이썬 : 다음 (파이썬 3.2.2) 다음 코드</p> <pre><code>def f(): raise Exception x = f() </code></pre> <p>을 시도 할 경우 할당
10
A
답변
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 문서에서 오른쪽 사이드에서 예외가 발생하면 할당의 왼쪽이 만지지 않는다고 명시 적으로 말하지 않지만이 기사를 읽은 후에는 할당을 피하는 것은 예외를 발생시키는 것입니다.
결론 : 예외가 내가 아는 한
관련 문제
- 1. self.class_eval << DEF ... DEF
- 2. <F : setPropertyActionListener ... />
- 3. F #을</p> <p>나는했습니다 ... EXPR
- 4. GLSL 매크로 확장으로이 작업을 수행 할 수 있습니까? 그래서</p> <pre><code>float Pow3 (const in float f) { return f * f * f; } float Pow4 (const in float f) { return f * f * f * f; } float Pow5 (const in float f) { return f * f * f * f * f; } </code></pre> <p>... 그리고 :
- 5. F # 스타일 - prefer() 또는 <|
- 6. 연산자 오버로딩 << 다음 코드에서 문자열
- 7. Erlang의 변수가 참조 변수입니까? <code>f()-> three</code> 및로드를 다음
- 8. github add <<<<<<< HEAD
- 9. 함수 또는 메소드 <code>f</code>와 클래스 <code>C</code>을 감안할 때 파이썬 3
- 10. 배열에 메서드를 매핑하는 방법은 무엇입니까?</p> <pre><code>(1..10).map &f </code></pre> <p>그것은 분명하지 않습니다이다 :</p> <pre><code>def f(x) x + 1 end </code></pre> <p>내가하고 싶은 것은과 같이 열거 가능한을 통해 매핑하는 것입니다
- 11. Vim Janus <D-F><D-/>
- 12. 다음 방법은 파이썬 반복자에 대해 참조 적으로 투명합니까?</p>이 <ul> <li><code>X.next()</code> 파이썬 2.X는</li>이 <li><code>X.__next__()</code></li> </ul> <p>이 referentially 투명하지 않은 파이썬 3.x의 모든 호출이 반환하기 때문에 :
- 13. Heredoc <<< 또는 <<?
- 14. 파이썬 단위 테스트에서 클래스 변수 값을 조롱하는 방법?</p> <pre><code>class A(): def f(self): self._v = 1 </code></pre> <p>이 시도 :</p> <pre><code>m=Mocker() A.f._v = m.mock() ... </code></pre> <p>하지만 작동하지 않았다
- 15. 안드로이드 : 나는</p> <pre><code>int a=(-2)%6 </code></pre> <p>을 시도 할 경우
- 16. 파이썬 파일 객체는</p> <p><code>f = open(filename, "a+")</code></p> <p><code>truncate_pos = f.tell()</code></p> <p><code>f.truncate(truncate_pos)</code></p> <p>이 아닌 것 같다 종료 현재 종자받은 위치에서 바이트를 제거하는 방법
- 17. Gemfile 구문 오류 : <<<<<<< localhost를 시작하려고 할 때 HEAD
- 18. 오버로드 된 연산자 <<
- 19. 맞춤 << 방법
- 20. 피할 수있는 방법 << - 할당을 사용하여 할당
- 21. 루비 클래스의 <= 연산자는 무엇입니까? 조각 다음
- 22. 연산자 << : std :: cout << i << (i << 1);
- 23. GWT : AsyncProvider 대신 <T> AsyncProxy를 사용하는 경우 <T,F>?
- 24. UI 다음</p> <p>, 빠른
- 25. <f : convertDateTime>을 사용하여 날짜를 포맷하고 <h : outputText>에 표시하십시오.
- 26. 파이썬 - 정규식 - 나는 다양한 파일의 나무가</p> <p>:-) 다음 작업에 요청
- 27. 파이썬 AST 패키지 : 오브젝트를 통과하는 것은 다음은 <em>AST</em> 및 <em>symtable</em> 패키지를 사용하여 파이썬 코드입니다
- 28. 파일 오류 O/2.7.2</p> <p>다음 실행 승
- 29. ColdFusion 구문을 사용하여 JavaScript에서 인수를 참조 할 수 있습니까? 당신이 다음</p> <pre><code><cfargument name="x"> </code></pre> <p>를 참조 할 경우 ColdFusion에서에서
- 30. 파이썬 : 나는 문제</p> <p>이
을 제기하는 경우 할당의 왼쪽 터치되지 않습니다,이 (거기 동일합니다, 단지 PyPy 테스트) 일치,하지만 난 ' 그것이 분명해야한다는 어떠한 명시 적 진술도 보지 못했습니다. –
글쎄, 공식 스펙이 없기 때문에 C, C++, Java, JavaScript 등의 사람들은 형식적인 스펙을 인용 할 수있다. 그러나 실용적으로, 구현 중 어느 것도 벗어나지 않으며, 그 행동은 벗어난 구현을 깨뜨릴만큼 충분히 중요합니다. – delnan