python里 try里怎么用int函数_python实现安全的int, float函数

python实现安全的int, float函数

类型转换总是会发生错误,尤其是当你的数据是由其他人通过API接口提供时,虽然文档上约定这个字段是int类型,但实际传给你时可能已经变成一个空的字符串。这种不按文档严格传输数据的情况时有发生,如果你对其他人传入的数据不信任而要亲自做类型转换的话,那么就得考虑编写一个安全的int函数和float函数。

为什么要编写专门的转换函数呢?简单说,我不希望在代码里看到一大堆的try ... except语句,毕竟这种类型转换几乎无处不在,所以,我需要一个专门的函数,为此我设计了如下两个函数

import logging

logger = logging.getLogger('my_log')

logger.setLevel(logging.INFO)

def safe_int(value, default_return=0, is_log=False):

'''

提供安全的类型转换函数,将value转换为int类型

:param value:需要被转换的数据

:param default_return: 转换失败时的返回值

:param is_log:是否记录日志

:return:

'''

pass

def safe_float(value, default_return=0, is_log=False):

'''

提供安全的类型转换函数,将value转换为float类型

:param value:需要被转换的数据

:param default_return: 转换失败时的返回值

:param is_log:是否记录日志

:return:

'''

我的目标是设计实现两个安全的类型转换函数,我可以定义转换失败时的返回值,如果我想把失败原因记录下来,只需要将is_log设置为True。这两个函数看起来功能几乎相同,因此还需要一个公共的函数来完成这些操作

def super_transfer(_type, value, default_return=0, is_log=False):

try:

result = _type(value)

except:

result = default_return

if is_log:

logger.error('将{value}转换为{_type}类型时失败'.format(value=value, _type=_type))

return result

def safe_int(value, default_return=0, is_log=False):

'''

提供安全的类型转换函数,将value转换为int类型

:param value:需要被转换的数据

:param default_return: 转换失败时的返回值

:param is_log:是否记录日志

:return:

'''

return super_transfer(int, value, default_return, is_log)

def safe_float(value, default_return=0, is_log=False):

'''

提供安全的类型转换函数,将value转换为float类型

:param value:需要被转换的数据

:param default_return: 转换失败时的返回值

:param is_log:是否记录日志

:return:

'''

return super_transfer(float, value, default_return, is_log)

现在,来测试一下效果吧

def test():

print(safe_float(2))

print(safe_float('3'))

print(safe_float('3f', is_log=True))

print(safe_int(98.8))

print(safe_int('8i', is_log=True))

if __name__ == '__main__':

test()

程序输出结果

2.0

3.0

0

98

0

将3f转换为类型时失败

将8i转换为类型时失败

转换失败时,函数返回了默认值,同时在日志中记录了失败的原因,当然我写的这个日志对象很简单,你在实践中应当使用功能更加完善的log对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值