在尝试将字符串解析为整数时,我必须编写以下函数才能正常失败。我想 Python 有一些内置的东西可以做到这一点,但我找不到它。如果没有,是否有一种不需要单独函数的更 Pythonic 的方式来做到这一点?
def try_parse_int(s, base=10, val=None):
try:
return int(s, base)
except ValueError:
return val
我最终使用的解决方案是对@sharjeel 的回答的修改。以下内容在功能上相同,但我认为更具可读性。
def ignore_exception(exception=Exception, default_val=None):
"""Returns a decorator that ignores an exception raised by the function it
decorates.
Using it as a decorator:
@ignore_exception(ValueError)
def my_function():
pass
Using it as a function wrapper:
int_try_parse = ignore_exception(ValueError)(int)
"""
def decorator(function):
def wrapper(*args, **kwargs):
try:
return function(*args, **kwargs)
except exception:
return default_val
return wrapper
return decorator
最佳答案
这是一个非常常见的场景,所以我编写了一个“ignore_exception”装饰器,它适用于各种抛出异常而不是正常失败的函数:
def ignore_exception(IgnoreException=Exception,DefaultVal=None):
""" Decorator for ignoring exception from a function
e.g. @ignore_exception(DivideByZero)
e.g.2. ignore_exception(DivideByZero)(Divide)(2/0)
"""
def dec(function):
def _dec(*args, **kwargs):
try:
return function(*args, **kwargs)
except IgnoreException:
return DefaultVal
return _dec
return dec
在您的情况下的用法:
sint = ignore_exception(ValueError)(int)
print sint("Hello World") # prints none
print sint("1340") # prints 1340
关于python - 是否有内置或更多 Pythonic 的方法来尝试将字符串解析为整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2262333/