Czy można użyć bloku catch catch wewnątrz funkcji lambda. Potrzebuję funkcji lambda do przekonwertowania pewnej zmiennej na liczbę całkowitą, ale nie wszystkie wartości będą mogły zostać zamienione na liczby całkowite.Python Wypróbuj blok catch wewnątrz lambda
Odpowiedz
Nie. Wartość lambda w Pythonie może być tylko pojedynczym wyrażeniem. Użyj nazwanej funkcji.
Jest wygodny napisać rodzajowe funkcji do konwersji typów:
def tryconvert(value, default, *types):
for t in types:
try:
return t(value)
except ValueError, TypeError:
continue
return default
Następnie można napisać lambda:
lambda v: tryconvert(v, 0, int)
Można również napisać tryconvert()
więc powraca funkcję, która przyjmuje wartość do konwersji; wtedy nie trzeba się lambda:
def tryconvert(default, *types):
def convert(value):
for t in types:
try:
return t(value)
except ValueError, TypeError:
continue
return default
return convert
Teraz tryconvert(0, int)
Zwraca funkcyjnych convert(value)
, która przyjmuje wartość i konwertuje go do liczby całkowitej i zwraca 0
jeśli nie można tego zrobić.
W tym konkretnym przypadku można uniknąć stosując try
bloku tak:
lambda s: int(s) if s.isdigit() else 0
W isdigit()
string method Zwraca true jeśli wszystko postacie s
są cyfry. (. Jeśli trzeba zaakceptować liczb ujemnych, trzeba będzie zrobić kilka dodatkowych kontroli)
W zależności od potrzeb, inne podejście może być, aby zachować szansę: catch poza lambda fn
toint = lambda x : int(x)
strval = ['3', '']
for s in strval:
try:
print 2 + toint(s)
except ValueError:
print 2
Wyjście:
5
2
- 1. Blok try/catch w Arduino
- 2. Serwer SQL WYPRÓBUJ ... POŁACZ z XACT_STATE
- 3. Tworzenie lambda wewnątrz pętli
- 4. Python: wypróbuj instrukcję w pojedynczej linii
- 5. Wyjątek nie zostanie złapany w blok catch
- 6. Lepiej jest mieć zsynchronizowany blok wewnątrz bloku try lub blok try wewnątrz zsynchronizowanego bloku?
- 7. Dlaczego blok TRY-CATCH jest niedozwolony w UDF?
- 8. Zakres zmiennej wewnątrz lambda
- 9. połączeń wewnątrz lambda wyrażenia
- 10. W jaki sposób kompilator wie, który blok catch ma wykonać?
- 11. Spłaszczaj Scala Wypróbuj
- 12. Który jest szybszy - A Korzystanie blok lub try/catch/finally
- 13. swiftmailer Swift_TransportWyjątek zostaje zablokowany przez blok próbny catch
- 14. C++ uzyskać opis wyjątek złowionych w catch (...) Blok
- 15. Blok catch nie działa w bibliotece rodzimej C++
- 16. Czy blok try-catch-finally jest synchroniczny w pliku node.js?
- 17. Dlaczego return wewnątrz pracy catch spróbuj 'rzuca'
- 18. Zagnieżdżona próba ... catch wewnątrz obsługi wyjątków C++?
- 19. Odbicie MethodInfo.Invoke() catch wyjątków od wewnątrz metody
- 20. iterator indeksu lambda wewnątrz indeksu
- 21. Python Lambda Identity Matrix
- 22. Python, lambda, znajdź minimum
- 23. Python lambda z regex
- 24. Jade - Korzystanie blok wewnątrz skryptu tagu
- 25. Jak utworzyć blok wielokrotnego użytku/proc/lambda w Ruby?
- 26. Python Lambda Count/Loop Function
- 27. Python, cPickle, marynowanie funkcje lambda
- 28. Czy mogę odwoływać się do lambda z wewnątrz używając Ruby?
- 29. zaimportować plik javascript w pliku html wewnątrz bloku try catch
- 30. Wymuś wypróbuj-z-zasobami Java 7
http://stackoverflow.com/questions/7108193/frequently-repeated-try-except-in-python – squiguy
nie _need_ funkcję lambda. Po prostu użyj nazwanej funkcji w swoim miejscu –