是否可以在lambda函數內部使用try catch塊。我需要lambda函數將某個變量轉換爲整數,但不是所有的值都能夠轉換爲整數。Python在lambda中嘗試捕獲塊
24
A
回答
37
沒有。 Python lambda只能是單個表達式。使用一個命名的函數。
可以很方便地編寫類型轉換的通用功能:
def tryconvert(value, default, *types):
for t in types:
try:
return t(value)
except ValueError, TypeError:
continue
return default
然後,你可以寫你的λ:
lambda v: tryconvert(v, 0, int)
你也可以寫tryconvert()
所以回報一個函數,將價值轉化;那麼你不需要拉姆達:
def tryconvert(default, *types):
def convert(value):
for t in types:
try:
return t(value)
except ValueError, TypeError:
continue
return default
return convert
現在tryconvert(0, int)
返回一個函數,convert(value)
,這需要一個值,並將其轉換爲整數,並返回0
如果不能這樣做。
9
在這種特定的情況下,可以避免使用try
塊這樣的:
lambda s: int(s) if s.isdigit() else 0
的isdigit()
string method返回true如果s
所有字符是數字。 (如果你需要接受負數,你將不得不做一些額外的檢查)
1
根據您的需要,另一種方法可以保持嘗試:拉姆達FN外抓
toint = lambda x : int(x)
strval = ['3', '']
for s in strval:
try:
print 2 + toint(s)
except ValueError:
print 2
輸出:
5
2
相關問題
- 1. 嘗試在Emacs中捕獲塊縮進
- 2. 嘗試在Matlab中捕獲塊
- 3. 嘗試...捕獲塊感染
- 4. 嘗試使用Java中的捕獲塊
- 5. 巨人嘗試在主要捕獲塊
- 6. 嘗試在Java中捕獲
- 7. 嘗試在javascript中捕獲
- 8. 嘗試捕獲塊中的未捕獲錯誤
- 9. PHP PDO嘗試catch塊沒有捕獲
- 10. 嘗試/捕獲塊和以下語句
- 11. python捕獲異常,並繼續嘗試塊
- 12. WebResponse嘗試捕獲
- 13. MySql嘗試捕獲
- 14. Python嘗試除了未能捕獲RemoteDataError
- 15. 嘗試捕捉塊不捕捉?
- 16. 在嘗試catch塊中未捕獲多個IOException子類
- 17. 在UI事件回調中嘗試/捕獲塊
- 18. 嘗試在鎖定的代碼塊中捕獲異常
- 19. php嘗試捕獲不捕獲異常
- 20. Pdo錯誤捕獲嘗試/捕獲
- 21. 在php中嵌套嘗試捕獲
- 22. 嘗試....在mysql中捕獲事務?
- 23. 在C#中的TransactionScope嘗試/捕獲#
- 24. 嘗試在.NET中捕獲錯誤threadpool
- 25. 在Java中嘗試並捕獲錯誤
- 26. 處理嘗試在swift3中捕獲URL
- 27. 嘗試在SQL Server中捕獲?
- 28. 如何通過錯誤而不嘗試在Python-Selenium中捕獲?
- 29. 嵌套嘗試塊沒有捕獲或最終塊
- 30. Javascript嘗試/捕獲範圍
http://stackoverflow.com/questions/7108193/frequently-repeated-try-except-in-python – squiguy
你不_need_ lambda函數。只需在它的位置使用一個命名的函數 –