ssoL2 TISTORY

[기초 PYTHON 프로그래밍] 18강. 예외 처리 본문

com/python

[기초 PYTHON 프로그래밍] 18강. 예외 처리

ssoL2 2020. 12. 25. 07:35

- 구문 에러(syntax error) : 문법 에러

 

구문 에러(syntax error) 예제

 

- SyntaxError: EOL while scanning string literal => 마지막 부분에 신텍스 에러

- SyntaxError: invalid syntax => 유효하지 않는 신텍스 에러

 


 

- 예외(exception) : 구문 에러가 없이 잘 작성된 코드라도 실행 도중 에러 발생 가능

                          => 잠재적인 에러 = '예외'

 

예외(exception) 예시 1

 

- NameError: name 'x' is not defined => 존재하지 않는 변수 참조

- TypeError: unsupported operand type(s) for +: …… => 타입 오류

 

예외(exception) 예시 2

 

- ZeroDivisionError: division by zero => 0으로 나눠서 오류

- IndexError: list index out of range => 유효하지 않은 인덱스 참조

 


 

- 예외 처리

 

예외 처리 try except else finally

- try : 예외 발생 가능성 있는 문장

- except 예외 종류 : 예외 처리 문장

- else : 예외가 발생하지 않은 경우, 수행할 문장 (안써도 됨)

- finally : 예외 발생 유무 상관 X try 블록(try부터 finally전까지의 블록) 이후 수행할 문장 (안써도 됨)

 

예외 처리 예시 1 / ZeroDivisionError, NameError, IndexError 예외처리 / try 문장 c=a/b에서 예외 에러나서 ZeroDivisionError 예외 처리함. 이후 나머지 except 다 필요없고 예외 처리 했으니 else도 넘기고 마지막 goodbye print 함

 

예외 처리 예시 2 / ZeroDivisionError, NameError, IndexError 예외처리 / c=a/b는 잘 됨 그러나 그 다음 있지도 않은 변수 x를 참조했으니 NameError나서 except NameError로 예외 처리됨 이후 나머지 except 다 지나고 else도 지나고 goodbye print 함

 

- 예외 발생하지 않는 경우 : else 가 있다면 수행함

 

예외 처리 예시 3 / try 구문의 c=a/b와 print(L[2])가 모두 예외가 나지 않았으므로 except 예외 처리 부분 다 지나고 else로 옴 그래서 else part print되고 마지막 goodbye print 함

 

- finally 구문이 있는 경우 : 무조건 수행되는 구문

 

예외 처리 예시 4 / try 구문 print(L[3]) 인덱스 잘못 참조해서 예외 처리 위해 except indexerror 예외 처리 함 이후 else는 건너뛰고 예외 처리 하든 안하든 무조건 실행되는 finnally의 finally part print 하고 마지막 goodbye print

 

예외 처리 예시 5 / try 구문 예외 안나도록 수정했으므로 프로그램 정상 진행 except도 실행 안되고 그러므로 else 실행 됨. else part print 되고 무조건 실행되는 finally 구문 print 되고 마지막 goodbye도 print 된다

Comments