Python에서 숫자가 정수인지 확인하기
발행: (2026년 2월 24일 오후 01:53 GMT+9)
3 분 소요
원문: Dev.to
Source: Dev.to
def is_int(x: int | float | str | None):
"""
Return True if *x* represents an integer value, otherwise False.
Handles:
- int, float, and numeric strings (e.g., "12", "12.0")
- None or non‑numeric strings gracefully return False
"""
try:
return float(x).is_integer()
except (TypeError, ValueError):
return False
작동 원리
float(x)는 입력을 부동소수점 숫자로 변환하려 시도합니다.is_integer()는 변환된 부동소수점 값에 소수점 이하 자리가 없는지를 확인합니다.- 변환에 실패하면(예:
x가None이거나 숫자가 아닌 문자열인 경우)TypeError또는ValueError가 잡히고 함수는False를 반환합니다.
사용 예시 (테스트 케이스)
# Positive cases – should return True
a1 = 12.0
a2 = "12.0"
a3 = "012.0"
b1 = 12
b2 = "12"
b3 = "012"
# Negative cases – should return False
c1 = 12.34
c2 = "12.34"
c3 = "012.34"
d1 = None
d2 = "12X100ML"
d3 = "12.x"
print(is_int(a1)) # True
print(is_int(a2)) # True
print(is_int(a3)) # True
print(is_int(b1)) # True
print(is_int(b2)) # True
print(is_int(b3)) # True
print(is_int(c1)) # False
print(is_int(c2)) # False
print(is_int(c3)) # False
print(is_int(d1)) # False
print(is_int(d2)) # False
print(is_int(d3)) # False
isinstance(x, int)만으로는 부족한 이유
- 문자열 숫자:
"12"또는"12.0"은int인스턴스가 아닙니다. - 수학적으로 정수인 부동소수점:
12.0은float이지만 정수 값을 나타냅니다. - 잘못된 입력:
"abc"나"12.x"와 같은 숫자가 아닌 문자열은 예외를 발생시키지 않고False를 반환해야 합니다.
대안(좀 더 자세한) 구현
def is_int(x: int | float | str | None):
if isinstance(x, str):
try:
x = float(x)
except (TypeError, ValueError):
return False
if isinstance(x, int):
return True
if isinstance(x, float):
return x.is_integer()
return False
정규식 접근법
정규표현식을 이용한 해결책도 가능하지만 불필요하게 복잡해집니다. 위에서 보여준 내장 변환 방식이 간결하고 신뢰할 수 있습니다. (정규식 버전은 다른 글을 참고하세요.)