- 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 된다