1.什么是防范式编程?
防范式编程是基于一种思想:主程序或者子程序不会因为传入错误的数据而被破坏。防范式编程的这种思维将程序可能导致的错误控制在有限的影响范围内。
防范式编程可以代码的健壮性,是一个良好的代码编写习惯,特别是在:
- 在守护进程或者后台程序中,保证服务持续不中断,不会因为
- 在API接口设计中,空值API的输入在允许的范围内
总结一下,防范式编程要做的就是数据合规性检测和异常的处理
2.python的防范式编程
异常控制处理机制:try...except...finally
, 是非常重要的一种防范式编程策略,这个主题在已讲解过,请前往。
https://mp.weixin.qq.com/s?__biz=MzA5MDUxMDUyMA==&mid=2452222338&idx=1&sn=cc4b916129d17276bc76c7daa8ab7c40&chksm=87d7d455b0a05d43b0cfb7808b68742a2f69cde11d2eecb8fdc8fed06a7c2b9a9eee076aecf2&token=1998982391&lang=zh_CN#rd
除了异常控制方式,python中对于数据合规性判断防范,提供了断言assert来判断是否满足条件。简单的例子如下:
a = None
assert a, "this is None"
assert 1==1, "this is not equal"
# AssertionError Traceback (most recent call last)
# <ipython-input-3-24485f90d1e8> in <module>()
# 1 a = None
# 2
# ----> 3 assert a, "this is None"
# 4
# 5 assert 1==1, "this is None"
# AssertionError: this is None
assert判断后面是否为False,如果为False则抛出AssertionError的异常。这个方式可以判断不同的数据要求。
另外,也可以通过if判断的方式,手动的raise抛出异常,例子如下:
a = None
if a is None:
raise ValueError("this is None")
# ValueError Traceback (most recent call last)
# <ipython-input-7-f262deb027fc> in <module>()
# 1 a = None
# 2 if a is None:
# ----> 3 raise ValueError("this is None")
# ValueError: this is None
a = None
if a is None:
raise
# RuntimeError Traceback (most recent call last)
# <ipython-input-8-f2e7c9709b97> in <module>()
# 1 a = None
# 2 if a is None:
# ----> 3 raise
# RuntimeError: No active exception to reraise
当前这些判断控制,都离不开异常的捕捉和处理。