2013-02-19 3 views
3

내가 원하는 것은 문자열이 숫자인지 (float인지) 확인하는 것이지만이를 수행하는 문자열 속성을 찾지 못했습니다. 어쩌면 하나도 없을지도 모른다. 이 코드에 문제가 있습니다 :문자열이 유효한 float인지 어떻게 확인할 수 있습니까?

N = raw_input("Ingresa Nanometros:"); 
if ((N != "") and (N.isdigit() or N.isdecimal())): 
    N = float(N); 
    print "%f" % N; 

내가 알기로는, 소수점 또는 부동 소수점 숫자 만 사용하면됩니다. N.isdecimal()는 내가 염두에두고있는 문제를 해결하지 못합니다.

+4

파이썬 진언은 *입니다 * '용서하지 허가를 요청합니다.'- 그것을 시도하고 문제 발생시 예외를 잡을 수있어. –

+1

코드가 작동하지 않는 이유를 알고 싶다면'N.isdigit()'의 'N'에있는 모든 문자가 숫자 일 경우 true입니다. '3.14'는 그렇지 않습니다. 당신은 "모든 문자가 한 자리입니까? 아니면 모든 문자가 소수입니까?"라고 묻고 있습니다. "각 문자가 숫자인지 소수인지"를 묻고 싶을 때,'모두 (ch.isdigit() 또는 ch.isdecimal()에 철자가 있어야 함) '라고 물어볼 때. 물론,'-3.14' 또는 다른 완벽하게 유효한'float's에 대해서는 여전히 작동하지 않을 것입니다. 그것은 "용서보다 용서를 구하기가 더 쉽다"는 "한 가지 방법"이라고하는 많은 이유 중 하나입니다.하지만 여전히 'isdigit'에 대한 이해는 가치가 있습니다. – abarnert

답변

10
try: 
    N = float(N) 
except ValueError: 
    pass 
except TypeError: 
    pass 

이것은 floatN 변환하려고합니다. 그러나 숫자가 아니기 때문에 가능하지 않으면 pass (아무 것도하지 않음)이됩니다.

try and except blocks을 읽어 보시기 바랍니다.

당신도 할 수 :

try: 
    N = float(N) 
except (ValueError, TypeError): 
    pass 
+1

'N'이'None'이면'TypeError'가 나오고 코드가 폭발합니다. 'float (N 또는 '')를 사용하십시오. –

+0

@YevgenYampolskiy 아, 맞습니다. 나는 그것을 피하기 위해'exceptError'를 추가했습니다. –

+3

'except (ValueError, TypeError)를 e : pass' 이상으로 사용하십시오. –

관련 문제