작은 폼의 수량 입력란이 s.isdigit()로 검사한 다음 int(s)를 불러요. 누군가 ²를 붙여 넣었더니, 바로 그 검사가 지켜 주기로 한 줄에서 ValueError가 났어요.
둘은 서로 다른 규칙을 써요. isdigit()은 숫자 값을 가진 문자면 참이라서 위첨자나 ⑦ 같은 동그라미 숫자까지 받아들여요. int()는 십진 숫자, 즉 isdecimal() 집합을 원하고요. 그래서 ²는 첫 번째는 통과하고 두 번째에서 실패해요.
for s in ["7", "²", "٣", "3"]:
print(repr(s), s.isdigit(), s.isdecimal())
print(int("٣"), int("3")) # 3 3
검사를 isdecimal()로 바꾸면 크래시는 멈춰요. 그런데 아랍-인도 숫자 ٣와 전각 3도 3으로 통과시키게 되는데, 이 입력란은 그런 문자를 선택지로 보여 준 적이 없어요. 크래시는 고칠 방법이 뻔하지만, 입력란이 그런 문자를 받아야 하는지는 아직 잘 모르겠어요. 다들 숫자 입력에 무엇까지 허용하세요?