try
, except
를 사용하여 예외적으로 오류를 처리 가능>>> f = open("나없는파일", 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '나없는파일'
>>> FileNotFoundError 오류 발생
0
으로 다른 숫자를 나누는 경우 (ZeroDivisionError)>>> 4 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>> ZeroDivisionError 오류 발생
>>> a = [1,2,3]
>>> a[4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>> IndexError
try
, except
문try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
➣ try 블록
수행 중 오류가 발생하면 except 블록
이 수행
➣ 하지만, try 블록
에서 오류가 발생하지 않는다면 except 블록
은 수행되지 않는다.
📌📌 ::: except 구문
except [발생 오류 [as 오류 메시지 변수]]:
위 구문을 보면 [ ] 기호를 사용하는데, 이 기호는 괄호 안의 내용을 생략할 수 있다는 관례 표기법이다. 즉 except 구문은 다음 3가지 방법으로 사용할 수 있다.
try
, except
만 쓰는 방법except 블록
수행try:
...
except:
...
except
문except 블록
수행try:
...
except 발생 오류:
...
except
문try:
...
except 발생 오류 as 오류 메시지 변수:
...
try:
4 / 0
except ZeroDivisionError as e:
print(e)
> 위처럼 4를 0으로 나누려고 하면 ZeroDivisionError가 발생하여
> except 블록이 실행되고 변수 e에 담기는 오류 메시지를 다음과 같이 출력한다.
>> 결과값: division by zero
try
, finally
문finally
절은 try
문 수행 도중 예외 발생 여부에 상관없이 항상 수행finally
절은 사용한 리소스를 close해야 할 때 사용f = open('foo.txt', 'w')
try:
# 무언가를 수행한다.
finally:
f.close()
>> foo.txt 파일을 쓰기 모드로 연 후에 try문을 수행한 후
>> 예외 발생 여부와 상관없이 finally절에서 f.close()로 열린 파일을 닫을 수 있다.
try:
...
except 발생 오류1:
...
except 발생 오류2:
...
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("인덱싱 할 수 없습니다.")
>> a는 2개의 요솟값을 가지고 있기 때문에 a[3]는 IndexError를 발생시키므로
>> "인덱싱할 수 없습니다."라는 문자열이 출력될 것이다.
>> 인덱싱 오류가 먼저 발생했으므로 4/0으로 발생되는 ZeroDivisionError 오류는 발생하지 않았다.
<<동일하지만 'as'를 사용하여 표현>>
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError as e:
print(e)
except IndexError as e:
print(e)
try:
a = [1,2]
print(a[3])
4/0
except (ZeroDivisionError, IndexError) as e:
print(e)
try
문에 else
문 사용Else
문은 exception이 발생하지 않았을 때 실행try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
else: # 오류가 없을 경우에만 수행된다.
...
>> try문 수행중 오류가 발생하면 except절이 수행되고 오류가 없으면 else절이 수행된다.
try:
age=int(input('나이를 입력하세요: '))
except:
print('입력이 정확하지 않습니다.')
else:
if age <= 18:
print('미성년자는 출입금지입니다.')
else:
print('환영합니다.')
>> 만약 '나이를 입력하세요:' 라는 질문에 숫자가 아닌 다른 값을 입력하면 오류가 발생하여
>> '입력이 정확하지 않습니다.'라는 문장을 출력한다. 오류가 없을 경우에만 else절이 수행된다.
https://wikidocs.net/30 :: 점프 투 파이썬