Python / int() / 자료형을 정수로 변환하는 함수
Python의 int()는 정수 형태의 문자열이나 숫자를 정수 객체로 변환합니다. 실수의 소수 부분은 0을 향해 버리므로 int(-2.7)은 -2이며, 반올림이나 수학적 내림과 다릅니다. "12.0"처럼 소수점이 있는 문자열은 직접 변환할 수 없습니다.
기본 사용법과 반환값
int(value)의 결과는 정수형인 int 객체입니다. 인수를 생략하면 0이며, 문자열은 기본적으로 10진수로 해석합니다. 앞뒤 공백, 부호, 숫자 사이의 올바른 밑줄을 허용하고 불리언 True와 False는 각각 1과 0이 됩니다. 지원 형식은 int() 공식 문서에서 확인할 수 있습니다.
예제는 Python 3에서 실행합니다. 전체 코드를 UTF-8의 int_example.py에 저장하고 python int_example.py로 실행합니다. 환경에 따라 python3 명령을 사용하며, 각 예제는 파일 내용을 바꾸어 독립적으로 실행할 수 있습니다.
print(int())
print(int(" +123 "))
print(int("1_024"))
print(int(True), int(False))
text = "12"
number = int(text)
print(number + 3, type(number).__name__)
print(text, type(text).__name__)
예상 결과:
0
123
1024
1 0
15 int
12 str
변환 결과를 새 변수에 저장해도 원래 문자열은 그대로입니다. 문자열 "12"에 숫자 3을 더하려면 먼저 변환해야 하며, 변환한 값으로 계산하면 15가 됩니다. 논리값을 개수로 받아들이면 안 되는 입력에서는 별도로 불리언을 거부해야 합니다.
소수 부분 제거는 반올림이나 내림이 아닙니다
0 방향 절삭은 양수와 음수 모두 소수 부분을 제거합니다. 반면 math.floor()는 주어진 값보다 크지 않은 가장 큰 정수로 내리므로 음수에서 차이가 납니다. 아래 출력의 열은 원래 값, int(), math.floor(), round() 순서입니다.
import math
for value in (2.7, -2.7):
print(value, int(value), math.floor(value), round(value))
2.7 2 2 3
-2.7 -2 -3 -3
음수 -2.7을 기준으로 int()는 -2, floor()는 -3입니다. 반올림이 필요하면 해당 규칙에 맞는 함수를 선택해야 합니다. 이미 계산된 부동소수점 값에는 근삿값 오차가 있을 수 있으며, int()가 원래 의도한 소수 값을 복원해 주지는 않습니다.
2진수·16진수 문자열과 base 지정
int(text, base)는 문자열에 적힌 수의 진법을 지정합니다. base는 2~36 또는 0이며, 0은 0b·0o·0x 접두어 등을 보고 해석합니다. 진법을 지정할 때 첫 인수는 문자열이나 지원되는 바이트 형식이어야 하며 숫자 객체를 넣는 방식은 아닙니다.
print(int("1010", 2))
print(int("ff", 16))
print(int("0xff", 0))
print(int("0b1010", 0))
print(int("010"))
print(int("010", 8))
try:
print(int("010", 0))
except ValueError:
print("ValueError")
10
255
255
10
10
8
ValueError
"010"은 기본 10진수에서는 10, 8진수로 지정하면 8입니다. base=0은 접두어 없는 0으로 시작하는 이 형태를 허용하지 않습니다. 반환된 정수에는 “16진수 표시 방식”이 저장되는 것이 아닙니다. 출력 형식을 바꾸려면 hex()나 format() 등을 별도로 사용합니다.
변환 오류와 큰 정수의 정밀도
입력 형식에 맞지 않으면 ValueError, 지원하지 않는 자료형이면 TypeError가 발생할 수 있습니다. 무한대는 OverflowError, 숫자가 아님을 뜻하는 NaN은 ValueError가 됩니다. 아래 코드는 예상한 예외만 잡아 다음 입력을 계속 확인합니다.
for value in ("12.0", "1e3", "1,000", "", None, float("nan"), float("inf")):
try:
print(repr(value), int(value))
except (ValueError, TypeError, OverflowError) as error:
print(repr(value), type(error).__name__)
'12.0' ValueError
'1e3' ValueError
'1,000' ValueError
'' ValueError
None TypeError
nan ValueError
inf OverflowError
int(float(text))로 우회하면 소수나 지수 표기를 읽고 절삭하는 전혀 다른 정책이 됩니다. 특히 큰 정수 문자열을 float에 먼저 넣으면 부동소수점의 표현 한계 때문에 정보가 사라질 수 있습니다.
text = "9007199254740993"
print(int(text))
print(int(float(text)))
9007199254740993
9007199254740992
정수 문자열을 정확히 읽으려면 바로 int(text)를 사용합니다. Python 정수는 고정된 32비트·64비트 범위에 묶이지 않지만 메모리 등의 자원은 유한합니다. Python 3.11 이후에는 일부 진법의 매우 긴 정수 문자열 변환에 자릿수 제한도 적용될 수 있습니다. 외부 입력은 업무에 필요한 길이와 값의 범위를 제한하며, 제한을 무작정 해제하지 않습니다.
문자열을 개수로 받을 때의 검증 예제
변환 성공과 유효한 업무 값은 다릅니다. 다음 함수는 문자열만 받고, int()로 변환한 뒤 음수를 거부합니다. 0을 포함하는 개수라는 조건이며, 부호·공백·밑줄 등 int()가 허용하는 표기를 그대로 허용합니다.
def parse_count(text):
if not isinstance(text, str):
raise TypeError("text must be a string")
value = int(text)
if value < 0:
raise ValueError("count must be non-negative")
return value
for text in (" 3 ", "-1", "2.5", ""):
try:
print(repr(text), parse_count(text))
except ValueError:
print(repr(text), "invalid count")
' 3 ' 3
'-1' invalid count
'2.5' invalid count
'' invalid count
음수를 허용하지 않는 검증에 실패하면 ValueError가 발생합니다. 실제 입력 화면에서는 예외 처리로 재입력을 안내할 수 있습니다. 상품 수량처럼 상한이 있거나 ASCII 숫자만 허용해야 한다면 해당 조건도 추가합니다. 잘못된 입력을 모두 0으로 바꾸면 진짜 0과 오류를 구분하기 어려우므로 피하는 편이 좋습니다.




