isdecimal(), isdigit(), isnumeric()는 문자열의 각 문자를 분류합니다. int()는 문자열 전체를 정수 표기로 읽습니다. 정수로 바꿀 수 있는지 알고 싶다면 int(text)를 호출해 ValueError를 처리하고, 입력 형식에 별도 조건이 있으면 변환 전에 검사하세요.
아래 가상 입력에는 전각 숫자, 위 첨자, 분수 문자, 공백과 부호가 있습니다. 출력에서 세 판정의 순서는 isdecimal, isdigit, isnumeric이고, 마지막 값이 10진 int()의 결과입니다.
inputs = ("12", "12", "³", "¾", " -12 ", "1_000", "")
for text in inputs:
try:
result = int(text)
except ValueError:
result = "ValueError"
print(repr(text), text.isdecimal(), text.isdigit(), text.isnumeric(), result)
'12' True True True 12
'12' True True True 12
'³' False True True ValueError
'¾' False False True ValueError
' -12 ' False False False -12
'1_000' False False False 1000
'' False False False ValueError
세 판정은 허용하는 문자 범위가 다릅니다
isdecimal()은 전각 12를 포함해 유니코드의 십진 숫자를 받습니다. isdigit()은 여기에 위 첨자 ³ 같은 숫자 문자도 포함합니다. isnumeric()은 분수 ¾처럼 수치가 부여된 문자까지 포함합니다. 어느 호출이든 문자 하나 이상이 있고, 모든 문자가 해당 분류에 들어가야 True입니다.
따라서 '³'.isdigit()이 True여도 그 한 글자를 10진 정수 표기로 읽으면 오류가 납니다. 반대로 int(" -12 ")와 int("1_000")은 각각 -12와 1000을 반환합니다. 정수 파서는 주변 공백, 숫자 바로 앞의 부호, 숫자 사이에 하나씩 넣은 밑줄을 표기의 일부로 처리할 수 있기 때문입니다.
수량 입력에 ASCII 숫자만 허용하는 예
가상의 주문 수량에 0부터 999까지, ASCII 숫자 한 자리에서 세 자리만 받는다고 정해 봅시다. 앞의 0은 허용합니다. isascii()와 isdecimal()을 함께 쓰고 길이를 확인한 뒤 숫자로 바꾸면 이 계약을 구현할 수 있습니다.
def read_quantity(text):
if not (text.isascii() and text.isdecimal() and len(text) <= 3):
raise ValueError("수량은 ASCII 숫자 한 자리에서 세 자리로 입력하세요")
return int(text)
for text in ("0", "007", "12", "1_2", "1000", " -2 ", ""):
try:
print(repr(text), read_quantity(text))
except ValueError:
print(repr(text), "거절")
'0' 0
'007' 7
'12' 거절
'1_2' 거절
'1000' 거절
' -2 ' 거절
'' 거절
전각 12와 1_2는 첫 코드에서 변환됐지만 이 수량 계약에서는 거절됩니다. 이 예에서 007은 계산할 수량이므로 정수 7로 받습니다. 자릿수가 식별에 쓰이는 접수번호라면 선행 0과 식별자 원문 보존을 확인하고 해당 필드의 계약을 따르세요.
가상 입력은 Windows 11의 CPython 3.14.3에서 각 블록을 독립 실행했습니다. 문자 분류는 Python 문자열 숫자 판정 문서, 정수 표기의 허용 범위는 Python int 문서에서 확인할 수 있습니다.