所谓健壮性,就是程序代码能够在一些意料之外的参数输入时,还能正常运行。
直白点就是代码无BUG
在Python这门编程语言中有一套代码风格规范(PEP8),在我们实际工作中,可以不完全遵守这个规范,但是代码一定要更具健壮性。以下列举工作中遇到的代码编写容易存在BUG的地方
场景一:字典取值问题
dict_test = {'name':'Jack','city':'深圳','age':20}
res = dict_test['city']
print(res)
#深圳
通常我们都是这种取值方式,前提是key存在,但是当key不存在时,程序就会报错终止
res = dict_test['gender']
# 获取性别
# 程序报错终止
KeyError: 'gender'
改进方式:使用get()方式,当key不存在时,得到None值
res = dict_test.get('gender')
print(res)
#None
当然,如果你取值的是某id值,当不存在key时,还可以设置默认的value,如:
res = dict_test.get('id',0)
print(res)
# 0
场景二:判断对象是否存在
接收一个对象,判断其是否存在,如 你知道函数返回的是个列表
test_list = []
if len(test_list) == 0:
print('对象为空')
else:
pass
#列表为空
但这种判断方式并不安全,如果你无法确定对象会不会是None时,那用len()方法就可能会导致程序报错终止,如 某个函数给你返回一个None值,对其进行判断:
test_list = None
if len(test_list) == 0:
print('对象为空')
else:
pass
#程序报错终止
TypeError: object of type 'NoneType' has no len()
改进方式:用更简洁的代码风格替代len()
判断存在用 if 对象
test_list = [1,2,3]
if test_list:
print('对象存在')
else:
print('对象为空')
# 对象存在
判断不存在用 if not 对象
test_list = None
if not test_list:
print('对象为空')
else:
print('对象存在')
# 对象为空
场景三:异常捕获 try...except
异常捕获在一些入参的地方,或者计算数值的时候可以很好的避免代码报错终止程序,如:
num = 10
div_ = 0
# 除数为0,计算报错
print(num / div_)
ZeroDivisionError: division by zero
改进方式:加入异常捕获,程序就会正常执行完毕
num = 10
div_ = 0
try:
res = num / div_
except Exception as e:
print("计算错误,原因:%s" % e)
#计算错误,原因:division by zero
持续更新...