python提供什么机制处理程序运行错误_浅谈Python异常处理机制

异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮。

对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算程序没有错误,你能保证用户总是按你的意愿来输入?就算用户都是非常“聪明而且配合”的,你能保证运行该程序的操作系统永远稳定?你能保证运行该程序的硬件不会突然坏掉?你能保证网络永远通畅……你无法保证的情况太多了!

对于一个程序设计人员来说,需要尽可能预知所有可能发生的情况,尽可能保证程序在所有糟糕的情形下也都可以运行。

考虑前面介绍的五子棋程序:当用户输入下棋坐标时,程序要判断用户输入是否合法。如果保证程序有较好的容错性,将会有如下伪码:

if 用户输入包含除逗号之外的其他非数字字符:

alert 坐标只能是数值

goto retry

elif 用户输入不包含逗号:

alert 应使用逗号分隔两个坐标值

goto retry

elif 用户输入的坐标值超出了有效范围:

alert 用户输入的坐标应位于棋盘坐标之内

goto retry

elif 用户输入的坐标已有棋子:

alert "只能在没有棋子的地方下棋"

goto retry

else:

#业务实现代码

...

上面代码还未涉及任何有效处理,只是考虑了 4 种可能的错误,代码量就己经急剧增加了。但实际上,上面考虑的 4 种情况还远未包括所有可能的情况(事实上,世界上的意外是不可穷举的),程序可能发生的异常情况总是多于程序员所能考虑到的意外情况。

而且正如前面所提到的,高傲的程序员在开发程序时更倾向于认为:“对,错误也许会发生,但那是别人造成的,不关我的事”。

如果每次在实现真正的业务逻辑之前,都需要不厌其烦地考虑各种可能出错的情况,针对各种错误情况给出补救措施,这是多么乏味的事情啊。程序员喜欢解决问题,喜欢开发带来的“创造”快感,但不喜欢像一个“堵漏”工人,去堵那些由外在条件造成的“漏洞”。

对于构造大型、健壮、可维护的应用而言,错误处理是整个应用需要考虑的重要方面,程序员不能仅仅只做“对”的事情,程序员开发程序的过程,是一个创造的过程,这个过程需要有全面的考虑,仅做“对”的事情是远远不够的。

对于上面的错误处理机制,主要有如下两个缺点:

无法穷举所有的异常情况。因为人类知识的限制,异常情况总比可以考虑到的情况多,总有“漏网之鱼”的异常情况,所以程序总是不够健壮。

错误处理代码和业务实现代码混杂。这种错误处理和业务实现混杂的代码严重影响程序的可读性,会增加程序维护的难度。

程序员希望有一种强大的机制来解决上面的问题,希望将上面程序改成如下伪码:

if 用户输入不合法:

alert 输入不合法

goto retry

else :

#业务实现代码

...

上面伪码提供了一个非常强大的“if 块”,即程序不管输入错误的原因是什么,只要用户输入不满足要求,程序就一次处理所有的错误。这种处理方法的好处是,使得错误处理代码变得更有条理,只需在一个地方处理错误。

现在的问题是,“用户输入不合法”这个条件怎么定义?当然,对于这个简单的要求,可以使用正则表达式对用户输入进行匹配,当用户输入与正则表达式不匹配时即可判断“用户输入不合法”。但对于更复杂的情形,就没有这么简单了。使用 Python 的异常处理机制就可以解决这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF DataGrid 通过自定义表头模拟首行固定

WPF DataGrid 通过自定义表头模拟首行固定独立观察员 2021 年 9 月 25 日最近工作中要在 WPF 中做个表格,自然首选就是 DataGrid 控件了。问题是,UI 设计的表格是在首行有一个新增按钮,那一行样式和其它数据行是一样的,就在表头下…

python和C语言分别实现插入排序

python语言代码:代码1 defInsertSort(numbers,n):2 fori inrange(1,n):3 j i-14 tem numbers[i]5 whilenumbers[j]>tem andj>0:6 numbers[j1] numbers[j]7 j -18 else:9 numbers[j1] tem10 print"Onthe sort:",numbers11 12 a [9,8,7,6,5,4,3,2,1,0…

Windows用户安全小技巧

本文适用于具有管理员用户和标准用户的所有Windows系统,如Windows 2000以上的操作系统,UAC是Windows Vista以上版本的具有功能。新安装的Windows系统或者新购买的含有Windows系统计算机一开始都需要安装许多软件并需要设置较多的含有Windows安全或用户控…

根据url获取html源码,通过URL访问和获取html源代码

Uniform Resource Locator ,在Internet的WWW服务程序上用于指定信息位置的表示方法指定互联网或本地上(web服务中)的文件、对象资源 等,或者说它相当于一个互联网上资源的一个指针协议 主机 路径 资源http://www.itfuture.org/forum/index.jsp …

从网恋到失恋只需要一秒...

1 原来放下一个人如此简单...▼2 而且到现在衣服都没找到▼3 这东西叫糖醋液,实验室比例是:糖:醋:酒:水1:2:3:4▼4 老师:这孩子真有原则▼5 呵,绝交吧▼…

Log4net数据表

USE [ASPNETDB] GO /****** 对象: Table [dbo].[Log] 脚本日期: 12/21/2011 22:41:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Log]([ID] [int] IDENTITY(1,1) NOT NULL,[Date] [datetime] NOT NULL,[Threa…

go float64 比较_Go 每日一库之 plot

Go 每日一库之 plot简介本文介绍 Go 语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件,基本满足日常需求。同时,它也提供了定制化的接口,可以实现我们的个性化需求。plot主要用于将数据可视化,便于我们观察、…

大前端快闪:package.json文件知多少?

最近在公司某项目参与了一些前端工作,作为后端抠脚大汉,改点前端细节磕磕绊绊,改点大前端、工程化、HTTP交互倒也还能做到柳暗花明。于是打算用后端程序猿的视角记录一些{大前端}的知识快闪,也算是帮助读者构建完整的全栈技能体系…

大牛C++编程开发学习建议50条

2019独角兽企业重金招聘Python工程师标准>>> 每个从事C开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少。本文就给出了网上流传的对C编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅…

JQuery函数在IE浏览器中测试的注意事项

这几天刚学JQuery,在测试hide,show,slideToggle函数的时候,在firefox浏览器都很正常,而在IE浏览器里面却出现一些动画异常。这些过渡效果快结束的时候,都出现了一些跳动的现象,例如我对一个段落…

html2canvas改成同步,html2canvas转为图片异步转同步问题(记录)

描述:最近使用html2canvas插件截取页面上指定dom为图片,然后将生成的图片替换页面上的dom后,将替换后的页面内容保存至数据库,结果保存的是保存前的页面,初步判定是html2canvas的异步执行造成的。参考了两篇博文&#…

杨辉再发声明:没有及时交流工作进展,深表歉意

全世界只有3.14 % 的人关注了爆炸吧知识pixabay.com编者按加州大学付向东教授实名举报中科院上海神经所杨辉事件在过去一周成为学术界讨论的热点话题。付向东称自己2018年在神经所做学术报告后,杨辉重复其实验却未告知并抢发文章。杨辉7月3日发表声明,称…

fedora12下pppoe服务器的搭建

1. 查看系统上是否安装了pppoe服务器软件[rootlocalhost ~]# rpm -qa | grep pppoerp-pppoe-3.10-6.fc12.i686若显示以上信息则已经安装了pppoe软件,若无信息则首先安装pppoe软件[rootlocalhost ~]# yum install pppoe2. 配置系统支持IP转发[rootlocalhost ~]# vim …

z变换公式表_如何使用标准正态分布表?

正态分布这个概念在统计学中很常见,在做与正态分布有关计算的时候经常会用到标准正态分布表。如果知道一个数值的标准分数即z-score,就可以非常便捷地在标准正态分布表中查到该标准分数对应的概率值。任何数值,只要符合正态分布的规律&#x…

android 钢琴识别音阶对错_Sans钢琴音阶手机版|Sans钢琴音阶安卓版下载 v1.4 - 跑跑车安卓网...

Sans钢琴音阶游戏是一款有趣的音乐节奏类手机游戏,sans经典角色还原,融入闯关游戏元素,丰富的玩法,赶快来下载体验吧。游戏介绍Sans钢琴音阶游戏是一款拥有着大量不同类型游戏歌曲各种不一样游戏玩法的闯关类型音乐游戏&#xff0…

.NET 6 中的 ConfigurationManager

.NET 6 中的 ConfigurationManagerIntro.NET 6 为了 Minimal API 引入了一些新东西,其中就包含了一个全新的配置对象 ConfigurationManager这并不是 .NET Framework 里的静态类 ConfigurationManager,而是 .NET Core 里的配置 Microsoft.Extensions.Conf…

60个高质量的CSS、XHTML网页布局模板下载

无论您下载和解剖预建模板是为了学习最新的CSS布局技术,或者下载的目的是为了易于编辑制作现成的独立网站,您都不应该仅限于免费且可用的一个拥有众多克隆版本、陈旧的且往往是枯燥的模板。网页设计的流行趋势和技术总是在千变万化,因此&…

总有人会偷看你的朋友圈

全世界只有3.14 % 的人关注了爆炸吧知识生活中,总是会有人在默默关注着你。你的朋友圈,常常有人来“偷偷”光顾,而这些细枝末节常常被我们忽视。 你不想让关心你的人失望,于是在朋友圈分享优质文章,希望你的快乐…

关于tomcat的使用方法(配置及使用)

前一段时间要做一个音乐播放器,要实现在线下载歌曲功能,这里要用到服务器,我决定使用Tomcat。 1.下载tomcat http://tomcat.apache.org/ 推荐下载7.0 版本(8.0刚出来,据说还有些问题;6.0反正我没搭建好&a…

HTML5中常见的列表标签包括,介绍几个常用的HTML5标签

一、Html的基本结构:网页的文本、图片等信息;二、Head部分:用于表示网页的元数据即描述网页的基本信息其常用标签及属性有:1、title标签:浏览器标签页显示的标题2、meta标签:其常用属性①charset:设置文档的…