Python: Konvertiere einen String in einen Integer

8

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).

    
Adam Nelson 24.03.2010, 15:17
quelle

8 Antworten

20

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 ):

%Vor%

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!

%Vor%

int weiß genug, um führende und nachfolgende Leerzeichen ganz von selbst zu ignorieren! -)

    
Alex Martelli 24.03.2010, 15:27
quelle
8
%Vor%

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.

    
Ludwik Trammer 24.03.2010 15:25
quelle
8

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?

    
gruszczy 24.03.2010 15:18
quelle
1
%Vor%     
Xavier Combelle 24.03.2010 15:21
quelle
0

Sie könnten einfach:

%Vor%

Aber es wird ein ValueError geworfen, wenn das abgestreifte unsafe_string keine gültige Zahl ist. Sie können natürlich den ValueError abfangen und damit machen, was Sie wollen.

    
mojbro 24.03.2010 15:22
quelle
0

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%     
Ian Clelland 24.03.2010 15:31
quelle
0

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 = -1

     

wenn a! = -1:
  #user hat kompatible Daten eingereicht   sonst:
  #informieren Benutzer ihres Fehlers

Ich hoffe, das hilft.

    
codezealot 24.03.2010 16:01
quelle
0
%Vor%

fn für "str to float" ist ein bisschen komplizierter, aber ich denke, ich kann es tun, wenn es nötig ist.

    
Tatcoolx 27.03.2014 11:33
quelle

Tags und Links