이번 포스팅은 타입 캐스팅(Type Casting)과 예외 처리(Exception Handling)에 대해 작성해보려고 합니다.
앞선 포스팅에서 파이썬의 기본 자료형들에 대해서 공부를 해보았는데요, 그 글들을 읽으면서 이런 의문이 드신 분들도 계실 겁니다.
int 타입에서 str 타입으로 변경하고싶으면 어쩌지?
set로 만들었어야했는데 실수로 list로 만들었으면 어쩌지?
변수를 다른 명으로 생성을 해야하나?
이런 분들을 위해 준비한 것이 바로 타입 캐스팅입니다!
타입 캐스팅은 변수나 값을 하나의 데이터 타입에서 다른 데이터 타입으로 변환하는 과정을 의미합니다.
파이썬에서 이러한 과정은 매우 간단한데요, 그냥 변수명을 ()
로 감싸고 괄호 앞에 변경하길 원하는 타입명을 입력하시면 됩니다. 바로 예시를 통해 알려드리겠습니다.
1) 기본 타입 변환 예시
# str을 int로 변환
num_str = "123"
num_int = int(num_str)
print(num_int, type(num_int)) # 출력 : 123 <class 'int'>
# float으로 한 번 더 변환
num_float = float(num_str)
print(num_float, type(num_float)) # 출력 : 123.0 <class 'float'>
# 다시 str으로 변환
num_new_str = str(num_int)
print(num_new_str, type(num_new_str)) # 출력 : 123 <class 'str'>
2) 컬렉션 타입 변환 예시
# 리스트를 세트로 변환하여 중복 제거
my_list = [1, 2, 2, 3, 4, 4, 5]
my_set = set(my_list)
print(my_set) # 출력 : {1, 2, 3, 4, 5}
솔직히, 지금까지 배웠던 것 중에 가장 쉽습니다ㅋㅋㅋㅋ
솔직히 귀여운데 예의 바른 고양이는 예외처리 해줘야합니다ㅋㅋ
다음은 제가 업무에 임하면서 이건 좀 잘 알아둬야겠다!!라고 생각한 예외 처리입니다.
정신없이 프로그래밍을 하다보면 예상치 못한 오류가 생기는 경우가 많습니다. 예를 들어, 크롤링을 하다가 페이지가 로딩되지 않았는데 다음 명령어를 실행을 하려하면 NoSuchElementException
에러가 발생할 수 있습니다.
이럴 땐 당황하지 않고 예외 처리를 해주면 되는데요,
예외 처리란 이러한 오류가 발생했을 때 프로그램이 강제 종료되는 것을 방지하고, 오류를 관리할 수 있게 해 주는 메커니즘을 뜻합니다.
예외처리의 기본 형식입니다.
try:
# 예외가 발생할 가능성이 있는 코드
except 예외타입1:
# 예외타입1이 발생했을 때 처리할 코드
except 예외타입2 as e:
# 예외타입2가 발생했을 때 처리할 코드,
else:
# 예외가 발생하지 않았을 때 실행될 코드
finally:
# 예외 발생 여부와 상관없이 항상 실행될 코드
이것 또한 예시를 보시면 더욱 쉽게 이해가 가실 겁니다.
1) 단일 예외 처리 예시
# 파일을 열 때 발생하는 예외
# 파일이 존재하지 않는 경우와 파일을 여는 동안 발생하는 다른 예외를 처리
try:
# 'example.txt' 파일 열기
with open('example.txt', 'r') as file:
print(file.read())
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
except Exception as e:
# 다른 모든 예외를 처리
print(f"파일을 열 때 예외가 발생했습니다: {e}")
2) 여러 예외 처리
# 숫자를 입력받아 나눗셈을 수행하는 프로그램
# 입력 값이 숫자가 아닌 경우나, 나누는 수가 0인 경우에 대한 예외 처리를 포함
try:
# 사용자 입력 받기
num1 = input("첫 번째 숫자를 입력하세요: ")
num2 = input("두 번째 숫자를 입력하세요: ")
# 입력 값을 정수로 변환
num1 = int(num1)
num2 = int(num2)
# 나눗셈 결과 출력
result = num1 / num2
print(f"{num1} / {num2} = {result}")
except ValueError:
# 입력 값이 숫자가 아닌 경우
print("오류: 숫자를 입력해야 합니다.")
except ZeroDivisionError:
# 나누는 수가 0인 경우
print("오류: 0으로 나눌 수 없습니다.")
except Exception as e:
# 그 외 모든 예외 처리
print(f"예상치 못한 오류가 발생했습니다: {e}")
3) finally
블록 사용
finally
구문은 예외 발생 여부와 상관없이 항상 실행되는 코드 블록입니다. 이는 주로 리소스 해제, 파일 닫기, 네트워크 연결 해제와 같은 정리 작업을 수행하는 데 사용됩니다.
finally
블록은 리소스 관리에 있어서 매우 중요하며, 프로그램의 안정성을 높이고 자원 누수를 방지하는 데 도움을 줍니다.
# 파일을 열어 작업 수행 후, 파일을 닫는 상황
try:
f = open("somefile.txt", "r")
# 파일에서 데이터 읽기
content = f.read()
print(content)
except FileNotFoundError:
# 파일이 없을 경우 예외 처리
print("파일이 존재하지 않습니다.")
finally:
# 파일이 열려 있으면, 파일 닫기
if 'f' in locals():
f.close()
print("파일을 닫았습니다.")
4) else
블록 사용
else
블록은 try
블록 내의 코드가 예외를 발생시키지 않았을 때 실행되는 코드 블록입니다. 이는 종종 예외가 발생하지 않았을 때만 실행해야 하는 코드를 분리하기 위해 사용됩니다.
else
블록을 사용함으로써, 예외가 발생하지 않았을 때만 실행되어야 하는 코드를 더욱 안전하게 관리할 수 있습니다.
# 숫자를 입력하면 제곱을 출력하는 프로그램
try:
# 사용자 입력 받기
number = int(input("숫자를 입력하세요: "))
except ValueError:
# 입력 값이 정수가 아닐 경우 예외 처리
print("유효한 숫자가 아닙니다. 정수를 입력해주세요.")
else:
# 예외가 발생하지 않았을 때 실행되는 블록
print(f"입력된 숫자의 제곱은 {number ** 2} 입니다.")
finally:
# 예외 발생 여부와 상관없이 항상 실행되는 블록
print("프로그램이 종료되었습니다.")
지금까지 타입 캐스팅과 예외 처리에 관해 배워보았습니다.
이름만 보았을 땐 상당히 어려울 것 같았지만 막상 보니 별 거 없는 개념들이었습니다.
오늘도 긴 글 읽어주셔서 감사합니다.
안뇽!