是否可以在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函数。只需在它的位置使用一个命名的函数 –