2013-09-04 11 views
8

Imparare Python e un po 'bloccato.Python String to Int o None

Sto provando a impostare una variabile uguale a int(stringToInt) o se la stringa è vuota impostata su None.

Ho provato a fare variable = int(stringToInt) or None ma se la stringa è vuota, si verificherà l'errore invece di impostarlo su Nessuno.

Conosci qualcosa?

+3

Definire 'vuoto'? '' '' Vuoto? Qualsiasi spazio bianco? – dawg

risposta

25

Se si desidera un one-liner come hai tentato, andare con questo:

variable = int(stringToInt) if stringToInt else None 

Questo assegnerà variable-int(stringToInt) solo se non è vuota ed è "numerica". Se, ad esempio è 'mystring', verrà generato un numero ValueError.

Per evitare ValueError s, fino a quando non stai facendo un generatore di espressione, utilizzare un try-except:

try: 
    variable = int(stringToInt) 
except ValueError: 
    variable = None 
+4

Questo spiega dettagliatamente per un principiante. – Marcin

8

Utilizzare il fatto che esso genera un'eccezione:

try: 
    variable = int(stringToInt) 
except ValueError: 
    variable = None 

Questo ha il piacevole effetto di legame variable a None altri errori comuni: stringToInt='ZZTop', per esempio.

+0

Penso che questa soluzione sia probabilmente la migliore in quanto gestirà situazioni in cui la stringa contiene anche caratteri non numerici. –

1

Ecco alcune opzioni:

intercettare l'eccezione e gestirlo:

try: 
    variable = int(stringToInt) 
except ValueError, e: 
    variable = None 

non è poi così eccezionale, rappresentano per esso:

variable = None 
    if not stringToInt.isdigit(): 
     variable = int(stringtoInt) 
+1

Non hai bisogno di 'all()'. 'se stringToInt.isdigit():' è sufficiente. –

+0

@ Robᵩ, grazie. Buon punto –

+0

in python non riesci a catturare le eccezioni tranne te ..... –

5

penso che questo sia il modo più chiaro:

variable = int(stringToInt) if stringToInt.isdigit() else None 
+1

Questo non funzionerà dove stringToInt è None poiché non ha isdigit() – Damian