前面的文章中,基本上把Python中相关的核心语法系统性梳理了一篇,相信已经掌握这些内容的同学,可以熟练地利用内置模块,采用函数式编程范式或者面向对象编程范式进行常规的编码工作了。
稍微有些编程经验的同学应该都知道这3个事实:
1、编写的代码不是只给自己看的,所以很多编程规范其实主要是用来指引我们编写出更加易读的代码。
2、需求是在不断变化的,甚至朝令夕改都是常态,所以,之所以有一些编程范式、设计模式,其实是为了编写出更加易于扩展的代码,使得代码易于维护。
3、静态的代码执行起来编程动态的进程,但是进程的上下文环境可能是千差万别的,数据库、网络、硬件性能等,都可能导致运行中的程序遭遇编写之初未能想到的异常因素,所以,各种架构设计还有一个很关键的目标在于提高程序的可用性,也就是所谓的“鲁棒性”、“健壮性”。
如果说你编写的代码能够完成业务的需求了,那只是最基本的一步,为了应对各种未知错误,还有很多事情要做。
这篇文章作为Python中的异常处理内容的开篇,但是不会涉及到任何代码,主要聊聊关于我们在计算机科学中与错误进行的永无终止的斗争。
本文的主要内容有:
1、从满足需求到健壮性还有很远的路
2、检错
3、排错
4、容错
1、从满足需求到健壮性还有很远的路在提升代码的健壮性,确保程序的高可用的过程中,测试工程师发挥了很大的作用,有一个关于测试工程师的经典笑话:
一个测试工程师走进一家酒吧,要了一杯啤酒
一个测试工程师走进一家酒吧,要了一杯咖啡
一个测试工程师走进一家酒吧,要了0.7杯啤酒
一个测试工程师走进一家酒吧,要了-1杯啤酒
一个测试工程师走进一家酒吧,要了2^32杯啤酒
一个测试工程师走进一家酒吧,要了一杯洗脚水
一个测试工程师走进一家酒吧,要了一杯蜥蜴
一个测试工程师走进一家酒吧,要了一份asdfQwer@24dg!&*(@
一个测试工程师走进一家酒吧,什么也没要
一个测试工程师走进家酒吧,又走出去又从窗户进来又从后门出去从下水道钻进来
一个测试工程师走进家酒吧,又走出去又进来又出去又进来又出去,最后在外面把老板打了一顿
一个测试工程师走进一
一个测试工程师走进一家酒吧,要了一杯烫烫烫的锟斤拷
一个测试工程师走进一家酒吧,要了NaN杯Null
1T测试工程师冲进一家酒吧,要了500T啤酒咖啡洗脚水野猫狼牙棒奶茶
1T测试工程师把酒吧拆了
一个测试工程师化装成老板走进一家酒吧,要了500杯啤酒,并且不付钱
一万个测试工程师在酒吧外呼啸而过
一个测试工程师走进一家酒吧,要了一杯啤酒‘;DROPTABLE酒吧
测试工程师们满意地离开了酒吧
然后一名顾客点了一份炒饭,酒吧炸了
测试工程师在实际工作中,真的是让研发人员又爱又恨的角色。一方面,测试的工作对于代码的质量至关重要;另一方面,测试的工作有时候似乎又过于严苛……
当然,测试的工作主要在于尽量发现程序中潜在的导致错误的因素,从而在测试环境中提前解决掉,避免影响到线上业务。
我们与错误的斗争,主要涉及到三种策略:检错、排错、容错。下面分别介绍下这三种策略。
2、检错检错就是对代码进行各种检查、极端条件的边界测试,从而提前发现程序中可能存在的问题。
检错是能够应对错误的第一步,毕竟只有能够发现错误的存在,才有可能思考进一步应对的解决方案。
测试工作,只是检错的一种,测试能做的是,尽量把能够检查出来的错误暴露出来。
检查不出来的,或者确实由于环境的特殊性,无法真实模拟生产环境,那么有些错误确实是很难通过测试来检查出来的。
这时候的检错策略,就是在代码中,或者另起对应的监控、预警的服务。发现在动态运行过程中的错误,并将之暴露出来。
所以,很多时候,所谓的监控预警,也是一种检错的手段。
3、排错检错只是我们应对错误的第一步,能够找到我们的敌人,接下来要做的自然就是消灭敌人,也就是排错的策略。
如同测试和线上的监控预警一样,排错大体上也可以分为两块:调试和日志追踪。
所谓的调试,是通过添加断点、单步调试等方式,不断拒绝到发生错误的代码局域,呈现其运行时的上下文环境,比如各种变量、参数的取值等,从而便于定位问题原因,从而更好地排除错误。
所以,调试是紧跟着研发自己进行的单元测试或者测试提交的测试bug来展开的。
所谓的日志追求,其实是程序已经部署在线上环境中,通过记录日志文件,保存程序运行各个节点的环境信息,从而快速定位到异常发生的位置,异常发生时的上下文环境等,也是进行排错的必要手段。
当然,排错的手段不止局限于这两种。如果错误太多,完全无法解决,推倒重来,也未尝不是一种终极手段。
4、容错容错,是应对错误的最坏的或者说最无奈的一种策略了。这种策略的前提是,错误的出现是无法避免的,就如同不存在没有bug的代码,只是还没有发现bug而已。
所谓的容错,就是如果我们不能消灭错误,就要想办法能够容忍错误的存在,与错误和平共处。
容错的策略,应对的通常是可预知的、概率发生的、无法彻底消除的错误。
容错的策略,在分布式环境中比较常见,最常见的比如CAP定理中的P,就是分区容错性的含义。
容错的主要手段有:数据备份、代码版本管理、主备服务器等各种冗余策略。
总结本文主要介绍了计算机科学中关于错误的处理应对策略,分别介绍了检错、排错、容错的内容。在真正进行Python中异常的内容的学习之前,先有这些思想上的理念,还是很有必要的。
以上就是本文的全部内容,下一篇文章,开始聊聊Python中的异常处理。感谢您的拨冗阅读,希望对您有所帮助。