2013-08-22 5 views
8

나는 파이썬을 배우고 있는데, 나는 쉽게 소화 할 수없는 개념을 발견했다. 선택 사항 인 else 블록이 try 구조 내에있다. the documentation에 따르면파이썬에서 try/except 구문을 사용하는 이유는 무엇입니까?

:

은 try ... 문을 제외하고는 존재하는 모든 조항을 제외하고 따라야합니다, 옵션 else 절을 ​​가지고 있습니다. try 절이 예외를 발생시키지 않으면 을 실행해야하는 코드에 유용합니다.

내가 왜 시도 절은 시도 구조 내에서 예외를 제기하지 않는 경우 실행해야 코드가 약 혼란 스러워요 - 왜 단순히 동일한에서 제외 시도/수행하지 들여 쓰기 수준? 나는 예외 처리를위한 옵션을 단순화 할 것이라고 생각한다. 또는 다른 방법으로 묻는 질문은 else 블록에있는 코드가 수행 할 수없는 것이고, 단순히 try 문을 따르는 경우에는 수행되지 않습니다. 어쩌면 내가 뭔가를 놓치고있어, 나를 계몽 해 줄 수있을거야.

이 질문은 this one과 다소 비슷하지만 찾으려는 것이 없습니다.

답변

11

else 블록은 try의 코드가 예외를 발생시키지 않는 경우에만 실행됩니다. else 블록 외부에 코드를 삽입하면 예외에 관계없이 코드가 실행됩니다. 또한 일반적으로 중요하기 때문에 finally 전에 발생합니다.

이것은 일반적으로 오류가 발생할 수있는 간단한 설정 또는 확인 섹션이 있고 오류를 숨기지 않으려는 설정 한 리소스를 사용하는 블록이있는 경우에 유용합니다. try에 코드를 넣을 수 없으므로 오류가 전파되기를 원할 때 except 절로 갈 수 있습니다. 설치가 실패했거나 finally이 모든 것을 무너 뜨 렸기 때문에 자원을 사용할 수 없기 때문에이를 구조 외부에 배치 할 수 없습니다. 따라서 else 블록이 있습니다.

+0

아, OK ... 완벽한 의미가 있습니다. 그럼 try 섹션의 끝에 넣지 않으시겠습니까? 그 코드 자체가 예외를 던지고 그 예외 원점의 범위를 제한하려고 할 가능성이 있기 때문입니까? – amphibient

+2

예. 'except' 블록이 없다면 다른 언어로'try'에 넣는 것이 일반적입니다. 그러나 Python에서는'else'가 있기 때문에 이것을 사용합니다. – user2357112

+0

우수한 설명, 덕분에 – amphibient

4

예외 사례가 발생했는지 여부를 확인하기 위해 사용자가 플래그 변수를 정의하지 못하게 할 수 있습니다 (예 : for-else 루프).

간단한 예 :

lis = range(100) 
ind = 50 
try: 
    lis[ind] 
except: 
    pass 
else: 
    #Run this statement only if the exception was not raised 
    print "The index was okay:",ind 

ind = 101 

try: 
    lis[ind] 
except: 
    pass 
print "The index was okay:",ind # this gets executes regardless of the exception 

# This one is similar to the first example, but a `flag` variable 
# is required to check whether the exception was raised or not. 

ind = 10 
try: 
    print lis[ind] 
    flag = True 
except: 
    pass 

if flag: 
    print "The index was okay:",ind 

출력 :

The index was okay: 50 
The index was okay: 101 
The index was okay: 10 
관련 문제