파이썬/변수와 데이터 타입

파이썬 형변환 완벽 가이드 : 타입 확인, 숫자 변환, 예외 처리, 자주 하는 실수까지 한 번에 정리

creator6556 2025. 11. 19. 13:27

1 왜 형변환을 알아야 할까?

문자열과 숫자를 잘못 섞으면 오류가 발생

조건문은 내부적으로 bool 판단이 자동으로 수행

→ 입력값(input)은 무조건 문자열(str)이므로, 숫자로 변환해야 계산이 가능

→ 여러 값(리스트/튜플/세트/딕셔너리)을 다루러면 컬렉션 간 변환 규칙이 필수


2 타입 확인 기본기 - type(), isinstance()

1) type()

→ 정확히 '지금 이 값이 어떤 타입인지' 확인

1-1 코드

print(type(10))      # <class 'int'>
print(type("hello")) # <class 'str'>

2) isinstance()

상속 관계까지 고려해 타입을 판정

→ 가장 정확하고 실전적임

타입 비교는 무조건 isinstance() 사용을 습관

1-2 코드

print(isinstance(True, int))  # True (bool은 int의 자식 클래스)

728x90

3 묵시적 형변환 (자동 형변환)

파이썬은 연산 과정에서 더 넓은 표현 범위의 타입으로 자동 승격

→ bool에서 int, int에서 float, float에서 complex로 자동으로 변환함

2-1 코드

print(3 + 2.5)   # 5.5 (int -> float으로 자동 승격)
print(2 + 3j)    # (2+3j) (int -> complex 승격)
print(True + 3)  # 4 (True -> 1)

→ 숫자와 문자열 간, 서로 다른 컬렉션, 복잡한 구조물에선 자동으로 변환되지 않음


4 문자열 <-> 숫자 변환 핵심 규칙

→ 문자열에서 숫자로 변환하려면 문자열이 숫자 형태 그대로여야 함

3-1-1 코드

print(int('10'))     # 정수 문자열만
print(float('3.14')) # 실수 문자열

→ 숫자에서 문자열로 변환은 항상 가능함

3-1-2 코드

print(str(20))
print(f'나이: {20}') # 가장 추천하는 방식 (f-string)

5 숫자인지 확인하는 가장 안전한 방법

4-1-1 코드 : 정수 문자열 확인

print('123'.isdigit()) # True

4-1-2 코드 : 소수 여부 확인(try-except 활용)

def is_number(s):
    try:
        float(s)
        return True
    except:
        return False

print(is_number('3.14')) # True

4-1-3 코드 : 실재 변환 패턴 (가장 실전적)

value = input('숫자 입력: ')

try:
    num = float(value)
    print('변환 성공:', num)
except ValueError:
    print('유효한 숫자가 아닙니다.')

6 bool() 규칙 - Truthy / False

→ 파이썬은 조건문에서 값의 '존재 여부'로 참/거짓을 판단함

0, 0.0, '', [], (), {}, set(), None은 False로 평가되는 값들

→ '0', ' ', [0]을 포함한 False로 평가되는 값들을 제외한 나머지 값들 전부는 True로 평가


7 컬렉션(리스트/튜플/세트/딕셔너리) 변환 핵심 정리

1) 리스트 <-> 튜플

5-1 코드

print(tuple([1,2,3]))
print(list((1,2,3)))

2) 리스트/튜플 <-> 세트

→ 리스트/튜플을 세트로 변환하면서 중복이 제거되지만, 순서가 유지되지 않으므로 다르게 나올 수 있음

5-2-1 코드

print(set([1,2,2,3]))  # {1,2,3}

→ 다시 리스트/튜플로 만들면 순서가 달라질 수 있으므로, 정렬해서 변환하고 싶다면 5-2-2 코드 형식으로 사용

5-2-2 코드

print(sorted(set([1,2,2,3])))  # [1,2,3]

3) 문자열 <-> 컬렉션

5-3-1 코드 : 문자열 -> 컬렉션

print(list('abc'))   # ['a','b','c']
print(tuple('abc'))  # ('a','b','c')
print(set('hello'))  # {'h','e','l','o'}

5-3-2 코드 : 컬렉션 -> 문자열

print(''.join(['a','b','c']))    # 'abc'
print('-'.join(('a','b','c')))   # 'a-b-c'

4) 딕셔너리 변환 핵심

→ dict() 변환 시 키만 변환함

[(key,value), (key,value)]

8 안전한 변환 패턴 - 예외 처리 + 타입 점검

1) try-except 기본 구조

6-1 코드

value = 10

try:
    num = int(value)
    print(value)
except ValueError:
    print('정수로 변환할 수 없습니다.')

2) 단계적 변환 (정수 -> 실수 -> 실패)

6-2 코드

value = 3.14

try:
    print('정수:', int(value))
except ValueError:
    try:
        print('실수:', float(value))
    except ValueError:
        print('숫자가 아닙니다.')

3) 변환 전 조건부 검사

6-3 코드

value = ' 3 '

v = value.strip()

if v.isdigit():
    v = int(v)
    print(v)
else:
    print('정수가 아닙니다.')

4) 반복 가능한 타입인지 확인 후 변환

6-4 코드

value = (1, 2, 3)

if isinstance(value, (str, list, tuple, set)):
    print(list(value))

9 자주 하는 실수 & 주의사항 (필수만 추림)

→ 문자열과 숫자를 결합하려면 str()을 사용하거나, f-string 형식을 추천

→ 숫자가 아닌 문자열을 숫자로 변환하면 ValueError가 발생하므로, 변환 전 숫자 형태인지 반드시 검사하기

int()는 반올림이 아니라 '버림'

→ 정수는 반복이 불가능해 list()를 사용하면 TypeError가 발생함

→ dict()로 변환하려면 항상 (키, 값) 형태만 변환하기

input()으로 받은 값은 항상 문자열

set으로 변환 시 순서 보존이 안 됨

→ list()는 얕은 복사이므로, deepcopy가 필요


Python 형변환과 타입 확인에 대해 더 상세한 설명을 원하는 분들은 아래 사이트에 접속하기

Python 형변환과 타입 확인


Python 형변환과 타입 확인뿐만 아니라 다른 프로그래밍 언어에 대해 알고 싶은 분들은 아래 사이트에 접속하여 원하는 링크에 접속하기

프로그래밍 언어 정리 모음 

728x90