2012-09-17 4 views
29

Mögliche Duplizieren:
How do I check if a string is a number in Python?
Python - Parse String to Float or IntWie kann ich überprüfen, ob eine Zeichenfolge in Python einen numerischen Wert enthält?

Zum Beispiel möchte ich eine Zeichenfolge überprüfen, und wenn es nicht konvertierbar ist in Integer (mit int()), wie kann ich feststellen, dass ?

+0

Es gibt bereits eine Lösung hier http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python – ronak

+0

Für Klarheit, sollte '-99' erlaubt sein? Was ist mit "+123"? Oder "1729" (Ganzzahl mit führenden und nachgestellten Leerzeichen). '0x123'? –

+0

@MarkDickinson - warum sollte '' -99'' nicht erlaubt sein? – mgilson

Antwort

37

Verwenden .isdigit() method mit:

>>> '123'.isdigit() 
True 
>>> '1a23'.isdigit() 
False 

Zitieren der Dokumentation:

Geben Sie true zurück, wenn alle Zeichen in der Zeichenfolge Ziffern sind und mindestens ein Zeichen vorhanden ist, andernfalls false.

Für unicode Strings oder Python 3 Strings, müssen Sie eine genauere Definition verwenden und die unicode.isdecimal()/str.isdecimal() stattdessen zu verwenden; Nicht alle Unicode-Ziffern können als Dezimalzahlen interpretiert werden. U+00B2 SUPERSCRIPT 2 ist eine Ziffer, aber keine Dezimalzahl zum Beispiel.

+2

-1 für 'a =" 0x12 "' a.isdigit() '>>> False – user1655481

+4

Ich habe nicht downvote, aber' "1234" .isdigit() 'wird return 'False', obwohl' int' den Raum vorne ignoriert. – mgilson

+1

@ user1655481: das ist auch keine Zahl, es ist ein Python-Hex-Literal. 'int ('0x12')' löst ValueError aus, wenn Sie keine Basis angeben. –

28

Sie können immer try es:

try: 
    a = int(yourstring) 
except ValueError: 
    print "can't convert" 

Beachten Sie, dass diese Methode isdigit den Schatten stellt, wenn Sie wissen wollen, ob Sie eine Zeichenfolge in eine Gleitkommazahl konvertieren float

+3

Upvote. Es ist mehr pythonisch, einfach zu versuchen ... except :) – Ohad

Verwandte Themen