2013-09-04 16 views
8

Nauka Pythona i trochę utknęła.Python String to Int lub None

Próbuję ustawić zmienną na równą int(stringToInt) lub jeśli ciąg znaków jest pusty ustawiony na None.

Próbowałem zrobić variable = int(stringToInt) or None, ale jeśli ciąg znaków jest pusty, wystąpi błąd zamiast ustawiania go na Brak.

Czy znasz jakiś sposób?

+3

Zdefiniuj 'pusty'? Czy '' '' jest puste? Jakąkolwiek białą przestrzeń? – dawg

Odpowiedz

25

Jeśli chcesz jedno-liner jakbyś próbował przejść z tym:

variable = int(stringToInt) if stringToInt else None 

To przypisze variable do int(stringToInt) tylko jeśli nie jest pusta i jest „numeryczny”. Jeśli na przykład stringToInt jest 'mystring', zostanie podniesiony ValueError.

Aby uniknąć ValueError s, tak długo, jak nie jesteś dokonywania wyrażenie generatora, należy spróbować z wyjątkiem:

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

Zawiera to szczegółowe wyjaśnienie dla początkującego. – Marcin

8

wykorzystują fakt, że generuje się wyjątek:

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

ten ma przyjemny efekt uboczny wiązania variable do None innych występujących błędów: stringToInt='ZZTop', na przykład.

+0

Myślę, że to rozwiązanie jest prawdopodobnie najlepsze, ponieważ poradzi sobie z sytuacjami, w których ciąg zawiera również znaki nie będące cyframi. –

1

Oto kilka opcji:

połowu wyjątek i obsługiwać go:

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

To naprawdę nie jest takie wyjątkowe, stanowią dla niego:

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

Nie potrzebujesz 'all()'. 'if stringToInt.isdigit():' jest wystarczające. –

+0

@ Robᵩ, dzięki. Słuszna uwaga. –

+0

w Pythonie nie możesz złapać wyjątków oprócz nich ..... –

5

Myślę, że to najwyraźniejszy sposób:

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

To nie będzie działać, gdy stringToInt ma wartość None, ponieważ nie ma isdigit() – Damian