Hat jemand einen Quickie, um eine unsichere Zeichenfolge in eine int
umzuwandeln?
Die Zeichenfolge kommt normalerweise als '234\r\n'
oder etwas ähnliches zurück.
In diesem Fall möchte ich 234
. Wenn '-1\r\n'
, möchte ich -1
. Ich möchte nie, dass die Methode fehlschlägt, aber ich möchte nicht so weit gehen, es zu versuchen, außer, nur um Fehler zu verstecken (falls etwas Extremes passiert).
In diesem Fall können Sie try
/ except
vermeiden, obwohl ich dies nicht empfehlen würde (vorausgesetzt, Ihre Eingabe-Zeichenfolge heißt s
und Sie befinden sich in einer Funktion, die etwas zurückgeben muss ):
Der ...
-Teil in else
gibt an, wo Sie zurückgeben, was Sie wollen, zB s
war 'iamnotanumber'
, '23skidoo'
, leer, alle Leerzeichen oder ähnliches.
Wenn nicht viele Ihrer Eingabezeichenfolgen Nicht-Nummern sind, versuchen Sie es mit / except:
%Vor%Sie sehen den Gewinn in Prägnanz und in der Vermeidung der fummeligen String-Manipulation und Test! -)
Ich sehe viele Antworten, int(s.strip())
, aber das ist überflüssig: das Strippen ist nicht nötig!
int
weiß genug, um führende und nachfolgende Leerzeichen ganz von selbst zu ignorieren! -)
Damit wird alles außer Zahlen und dem "-" - Zeichen entfernt. Wenn Sie sicher sein können, dass es außer Leerzeichen keine überzähligen Zeichen gibt, verwenden Sie stattdessen die Methode von gruszczy.
int('243\r\n'.strip())
Aber das hilft dir nicht, wenn etwas anderes als eine Nummer passiert ist. Stellen Sie immer versuchen, außer und fangen ValueError
.
Wie auch immer, das funktioniert auch: int('243\n\r ')
, also brauchst du nicht einmal strip
.
BEARBEITEN :
Warum schreibst du nicht einfach deine eigene Funktion, die die Exception abfängt und einen vernünftigen Standard zurückgibt und in ein Util-Modul steckt?
Ohne zu wissen, welche Arten von Eingaben Sie erwarten, ist es schwer zu sagen, was "genug" ist, um dies zu lösen. Wenn Sie sich nur Sorgen über Zeilenumbrüche machen, dann genügt die Antwort von Xavier Combelle oder gruszczy:
%Vor%Wenn Sie irgendeine ganze Zahl irgendwo in einer Zeichenkette finden müssen, dann benötigen Sie möglicherweise etwas wie folgt:
%Vor%Unter Python 3.0 (IDLE) hat das gut funktioniert
strObj="234 \ r \ n"
versuche:
# a = int (strObj)
außer ValueError:
# a = -1
Druck (a) & gt; & gt; 234
Wenn Sie mit Eingaben arbeiten, denen Sie nicht vertrauen können, sollten Sie es auf keinen Fall tun, dann ist es eine gute Idee, try zu verwenden, außer Blöcke zu übergeben, um Ausnahmen zu steuern, wenn Benutzer inkompatible Daten bereitstellen. Es könnte Ihnen helfen, besser über den Versuch nachzudenken, außer, Strukturen als Abwehrmaßnahmen zum Schutz der Datenkompatibilität zu übergeben und nicht nur Fehler zu verstecken.
versuchen:
a = int (strObj) #benutzer setzt strObj="abc"
außer ValueError:
a = -1wenn a! = -1:
#user hat kompatible Daten eingereicht sonst:
#informieren Benutzer ihres Fehlers
Ich hoffe, das hilft.
Tags und Links python