91、Python之异常:十分力气,九分花在了应对错误上

南宫理的日志录 2024-11-13 11:36:46
引言

前面的文章中,基本上把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中的异常处理。感谢您的拨冗阅读,希望对您有所帮助。

0 阅读:0

南宫理的日志录

简介:深耕IT科技,探索技术与人文的交集