python isnumeric

python isnumeric
Submitted by hyacinth @
파이썬으로 백엔드를 만드는 중에 cmd 파라미터로 숫자를 받는 부분이 있었는데 유효한 값 체크를 위한 str.isnumeric() 부분에서 음수가 들어올 때 통과를 못했다. 하도 어이가 없어서 여기에 대해 IRC에 말해봤다.

[16:15] <jaeholee_> ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
[16:17] <hyacinth^talk> 음수 붙은 건 숫자 아닌가요?
[16:17] <hyacinth^talk> print (u"-5").isnumeric() 하니까
[16:17] <hyacinth^talk> False 내뱉는 거 보니까
[16:17] <hyacinth^talk> 헐.. .
[16:18] <ditto> isnumeric 자체가 원래 한 글자에만 먹는거 아닌가요
[16:19] <ditto> Return True if there are only numeric characters in S
[16:21] <hyacinth^talk> 5.5 같은 것도 False 떨어지는 거 보니까
[16:21] <hyacinth^talk> 문자열 처음부터 끝까지 읽어서 0~9 아니면
[16:22] <hyacinth^talk> False인가보네요
[16:22] <hyacinth^talk> 진짜 숫자 판단하는 건 직접 만들라 이건가
[16:22] <hyacinth^talk> ...
[16:22] <lifthrasiir> float을 통과하면 되죠 뭐
[16:23] <lifthrasiir> 어차피 1e30000 같은 걸 받고 싶은 건 아니잖아요?
[16:23] <hyacinth^talk> 아 그래도 되겠구나
[16:23] <ditto> 그리고 isnumeric은 문제가 Ⅲ 같은 것도
[16:23] <ditto> True로 떨어져요
[16:23] <ditto> ㅋㅋㅋ
[16:24] <kkung> NUMERIC
[16:24] <hyacinth^talk> ditto//... 진짜네요
[16:24] <ditto> ¾
[16:24] <Yurumechan> 애초에
[16:24] <ditto> 이것도 True ㅋㅋㅋ
[16:24] <Yurumechan> 유니코드 문자 체크라서
[16:24] <ditto> 넹
[16:24] <Yurumechan> 별 이상한게 다 잡힘
[16:24] <kkung> 一 이것도
[16:25] <kkung> true인가요 그럼
[16:25] <Yurumechan> isdecimal인가도 마찬가지
[16:25] <changwoo> 네[ 한글도 isalpha() True
[16:25] <Yurumechan> isdecimal은
[16:25] <Yurumechan> 아 isdigit에 합쳐져 있나
[16:25] <Yurumechan> 여튼 아랍 문자가 잡힌다거나...
[16:25] <kkung> >>> u'一'.isnumeric()
[16:25] <kkung> True
[16:25] <kkung> 과연
[16:25] <hyacinth^talk> 무섭다
[16:25] <hyacinth^talk> 호러
[16:25] <ditto> ㄲㄲ
[16:25] <kkung> >>> u'일'.isnumeric()
[16:25] <kkung> False
[16:25] <kkung> 차별하네
[16:25] <kkung> (?)
[16:25] <ditto> work
[16:26] <Yurumechan> 뜻문자의 장... 아니 단점
[16:32] <changwoo> >>> u'𐅉'.isnumeric()
[16:32] <changwoo> True
[16:32] <changwoo> 꼼꼼하네요
[16:33] <ditto> 저게 무슨 글자죠? ㅠㅠ
[16:33] <ditto> greek acrophonic attic ten talents
[16:33] <changwoo> 고대그리스숫자..라네요
[17:23] <jeyraof^> 쩐다
[17:23] <jeyraof^> isnumeric()
[17:24] <kkung> '一' 집어 넣으면 1 나오는 라이브러리 같은거 만들면 재밌을꺼 같군요
[17:25] <kkung> '一 + 2' 같은걸 만들 수 있을텐데
[17:25] <kkung> 근데 순전히 다 노가다 해야하는건가
[17:25] <kkung> unicode db에 저런건 없나
[17:25] <ditto> 제가 알기론 있는데
[17:25] <kkung> http://www.charbase.com/3192-unicode-ideographic-annotation-one-mark
[17:25] <kkung> 그러게요
[17:26] <kkung> 'numeric value'
[17:26] <ditto> >>> unicodedata.numeric(u'一')
[17:26] <ditto> 1.0
[17:26] <ditto> ㅋㅋㅋㅋ
[17:32] <토성구름> https://github.com/karipe/plusplus/blob/master/plusplus.py 이런 쓸데없는 거 만들다가 귀찮아서 버린 적이...


The following methods are present only on unicode objects:
 
unicode.isnumeric()
 
Return True if there are only numeric characters in S, False otherwise. Numeric characters include digit characters, and all characters that have the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION ONE FIFTH.
Python documentation
 

멍... 아, '숫자 문자'를 판단하는 거구나

파이썬 isnumeric()은 문자열이 유니코드 상에서 숫자 문자(u'四', u'¾' 분수, u'𐅉' 고대 그리스 숫자 (...) 등)로만 이루어져 있는지 판단하는 것이었는데 내가 의미를 잘못 생각했다. 쓸모있는 기능이긴 하지만 내가 필요했던 건 아니었다. 음수까지 대응할 수 있는 대안을 찾아봤는데 형 변환 할 때 예외처리를 사용하는 방법이 나아 보인다.
http://stackoverflow.com/questions/736043/checking-if-a-string-can-be-converted-to-float-in-python


결과 목록

» track back

이 글에는 0 개의 댓글이 있습니다.