范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python程序设计错误与异常

  学习目标:了解错误的基本概念了解异常的基本概念掌握Python内置异常掌握Python自定义异常掌握Python异常检测方法掌握Python异常处理方法
  本章知识导图:
  9.1 基本概念
  日常生活中,经常容易把错误和异常相混淆,下面分别看一下什么是错误和异常。9.1.1 什么是错误
  对编程而言,错误分两类:语法错误(Syntax Error)和逻辑错误(Logical Error)。
  一、语法错误
  语法错误是指不遵循语言的语法规则而引起的错误,通常表现为程序无法正常编译或运行。
  在Python中,常见的语法错误有:遗漏了某些必要的符号(冒号、逗号或括号等)关键字拼写错误缩进不正确空语句块(需要用 pass 语句避免该错误)
  二、逻辑错误
  逻辑错误又称语义错误,是指程序语法上是正确,可以正常运行,但会产生错误的运行结果。
  逻辑错误和编程语言无关,常见的逻辑错误有:运算符优先级考虑不周变量名使用不正确语句块缩进层次不对使用布尔表达式中出错等9.1.2 什么是异常
  在程序设计中语句或者表达式在·语法上正确·,但是执行时候可能会发生错误而停止。异常是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行。
  Python用异常对象来表示异常情况。遇到错误后会引发异常。如果异常对象未被处理和捕捉,程序就会以堆栈回溯终止执行。
  在Python中,常见的异常如下(括号中为触发的系统异常名称):使用未定义的标识符(NameError)除数为 0(ZeroDivisionError)打开的文件不存在(FileNotFoundError)导入的模块没被找到(ImportError)
  异常通常有以下特点:偶然性。程序运行中,异常并不总是会发生。可预见性。异常的存在和出现是可以预见的。严重性。一旦异常发生,程序可能终止,或者运行的结果不可预知。9.2 Python中的异常
  根据异常定义的主体不同,Python中的异常分为内置异常和用户自定义异常。内置异常是Python语言内部已经定义好的一系列异常类,开发者 在平时接触到的大多数是这类异常。用户自定义异常是开发者在内置异常类型的基础上,根据实际需要自定义的异常,一般可用于异常处理的个性化设置。
  常见的内置异常:
  9.2.1 内置异常
  在实际开发中,大部分接触到的异常都是Exception的子类。一般情况下,在Python无法正常处理程序时就会触发一个异常。
  当发生异常时,开发者需要捕获并处理它,否则程序会终止执行。
  在Python程序异常终止时,解释器会以"堆栈回溯"(Traceback)的方式提示出异常信息。9.2.2 用户自定义异常根据实际项目需要,开发者也可以通过创建新异常类的方式定义自己的异常。注意:自定义异常类必须直接或者间接继承内置异常类Exception。自定义异常类的属性数量不宜过多,要尽量保持其简洁性。在创建一个抛出不同错误的模块时,可以为这个模块中的异常创建统一的父类,由各子类创建对应不同错误的具体异常。与标准异常类类似,为了程序代码的可读性,大多数自定义异常类的名字都建议以"Error"结尾。9.3 Python中异常的检测与处理
  在Python中,异常检测和处理最常用的方式是使用try-except、try-except-else和try-finally语句。另外,Python还提供了强制触发异常raise、断言机制assert和预定义的清理行为with等多种异常检测和处理机制。9.3.1 try-except
  try-except语句用来检测try语句块中的错误,在except语句中捕获异常信息并进行处理。
  (1)处理单个异常
  try-except语句处理单个异常的语法如下:
  try:
  #检测的语句
  except Error[ as Target]:
  # 处理异常的语句
  首先执行try子句中的程序,在执行过程中如果没有异常,跳过except子句;如果发生了异常,则中断当前try子句中的执行,剩余try子句中的语句被跳过,跳转到异常处理块中开始执行。
  例如:
  try:
  a = 20 / 2
  print(a)
  b = 4 * 2
  print(b)
  c = 4 / 0
  print(c)
  except Exception as error:
  print(error)
  结果:
  10.0
  8
  pision by zero   从输出结果上可以看出,try语句中的print(a)和print(b)都正常执行了,但当执行c=4/0时发生了错误,因为0不能作为除数,此时如果没有try-except语句的话,程序执行到这就会报错了,如下:   a = 20 / 2   print(a)   b = 4 * 2   print(b)   c = 4 / 0   print(c)   结果:   10.0   8
  Traceback (most recent call last):   File "D:/python_spider/python_demo/demo_2.py", line 5, in   c = 4 / 0   ZeroDivisionError: pision by zero   但是,因为有try-except语句,所以没有报错,只是打印了一个错误信息出来,程序并未发生异常中断执行,而是正常执行结束。   如果异常发生但没有匹配到except后的异常类型,那么异常抛到外层try语句;如果异常得不到处理,该异常成为未处理异常,导致程序终止并且打印异常信息,如下所示:   list2=[1,2,3,4]   try:   list2[4]   except KeyError as e:   print(e)   执行结果:   Traceback (most recent call last):   File "D:/python_spider/python_demo/demo_2.py", line 3, in   list2[4]   IndexError: list index out of range   (2)处理多个异常   try-except语句处理多个异常的语法如下:   try:      exceptError1 [ as Target]:      exceptError2 [ as Target]:      首先执行try子句中的程序,在执行过程中,如果没有异常,跳过except子句;如果发生了异常,则中断当前try子句中的执行,剩余try子句中的语句被跳过,跳转到对应的异常处理块中开始执行。   一个try语句可以有多个except子句,为不同的异常类型指定不同的处理方法。注意,不管有多少个except子句,本次运行至多只能有一个except子句被执行。   处理多个异常时,也可以把多个异常合并到一个except子语句中,使用带括号的元组方式列出多个异常类型,含义为对这些异常执行统一的处理方式,具体语法如下:   try:      except(Error1, Error2,...) [ as Target]:      处理多个异常时,也可以用Exception表示抓住所有异常,一般情况下建议在异常最后面用,用在最后抓未知的异常。具体语法如下:   try:      except(Error1, Error2,...) [ as Target]:      except Exception[ as Target]: #用Exception表示抓住所有异常   9.3.2 try except -else   另一种异常处理结构是try-except-else语句,其具体语法如下:   try:      exceptError1 [ as Target]:      exceptError2 [ as Target]:      else: #try子句中无异常,执行else子句      try-except-else语句是一种特殊的选择结构,如果try子句中的代码发生异常,并被某个except子句捕捉,则执行异常处理代码,此时,else子句不执行;如果try子句正常执行,没有异常发生,则执行else子句。   else子句的存在必须以except子句为前提,如果在没有except子句的try 语句中使用else子句会引发语法错误。9.3.3 try-finally   try-finally语句,try子句无论是否有异常发生,finally子句在离开try语句之前总是会执行,其具体语法如下:   try:      finally: # try子句中有无异常,均执行finally子句   < finally块>   对于当try子句中有异常发生并且没有被except子句处理,或是异常发生在except子句或else子句时,在finally子句执行之后,这些异常会重新抛出。   list2=[1,2,3,4]   try:   list2[4]   finally:   pass   结果:   Traceback (most recent call last):   File "D:/python_spider/python_demo/demo_2.py", line 3, in   list2[4]   IndexError: list index out of range9.3.4 try except-else-finally   在实际开发中,经常把try-except和try-finally混合使用,其语法结构如下:   try:      except Error1 [as Target]:      except Error2 [as Target]:      else: # try子句无异常,执行else子句      finally: # try 子句有无异常,均执行finally子句      在使用完整的try/except/else/finally语句时,出现的顺序必须是try-- >except-->else-->finally。   当try语句的其它子句通过break、continue或者return语句离开时,finally子句也会执行,但原来的异常将被丢失且无法重新触发。   在实际开发中,finally子句常用来释放外部资源,如文件和网络连接等,不论资源的使用是否成功9.3.5 强制触发异常raise   不管是使用try-except语句还是try-finally语句,出现的异常都是由解释器自动引发的。在实际项目中,比如对一些不合法输入要立即处理,这需要一种可以主动触发异常的机制。在Python中,用raise语句强制触发异常,其语法结构如下:   raise [Exception [, args [, traceback]]]Exception 是异常的类型,参数标准异常中任一种,如NameError等;args是自已提供的异常参数;最后一个参数是可选的,在实践中很少使用,如果存在,是跟踪异常对象。   当 Python 解释器接收到开发者自行引发的异常时,会中止当前的执行流,跳到该异常对应的 except 块,由该 except 块来处理该异常。   不管是系统自动引发的异常,还是程序员手动引发的异常,Python 解释器对异常的处理没有任何差别。9.3.6 断言机制assert   在没完善一个程序之前,不确定程序在哪里会出错,与其让它在运行时崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助,其语法结构如下:   assert expression [, arguments]   如果expression结果为真,什么都不做;如果expression结果为假,触发异常。   例如:   assert 0*2   结果:   Traceback (most recent call last):   File "D:/python_spider/python_demo/demo_2.py", line 1, in   assert 0*2   AssertionError   assert逻辑上等同于raise-if-not;   arguments是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。   if not condition:   raise AssertionError()9.3.7 预定义的清理行为with   程序运行时,当不再需要一些对象时,系统会自动执行清理动作,而不论对象操作是否成功,开发者都不用手动执行对象清理动作。但是在某些条件下会有问题,如下所示:   for line in open("t.txt"):   print(line, end="")   上述代码中,假设文件"t.txt"存在,程序会读取该文件并打印内容到显示器,之后文件会保留打开状态并持续一段不确定的时间。这在简单的脚本中不是什么大问题,但是在大型的应用程序中就会出现问题,因为在此期间可能有其它代码使用该文件。   此时就需要用with,例如:   with open("t.txt") as file:   file.readlines()   这样就不用自己去清理内存了,当with语句执行完后,自动销毁内存。9.4 总结本章首先介绍了错误和异常的基本概念详细介绍了Python异常检测和处理机制介绍了异常检测和处理最常用方法:try-except语句、try-finally语句、强制出发异常raise、断言机制assert及预定义的清理行为with等。

肇庆规范化标准化建设党群服务中心,筑牢基层红色阵地现在党群服务中心设在一楼,我们老年人来办事方便很多!而且还新建了会议室和厕所,我们也有新活动场所,设施完备功能齐全。近日,肇庆市高要区回龙镇刘村村党群服务中心面貌焕然一新正式亮相,县市看点如皋东陈白肉茨菇迎丰收种出致富好前景这几天,虽然天寒地冻,但如皋市东陈镇南庄村近百亩白肉茨菇却迎来了丰收季,田间地头一片繁忙景象。记者走进南庄村根华农场白肉茨菇种植基地,只见几名村民正穿着皮裤站在茨菇田里,或用水枪冲沙洲日记那个村庄12月20日星期二晴南岭,也叫五岭,是条知名度很高的山脉。它像一条巨龙,东西向横亘在祖国的南方。头在云贵高原,尾巴却伸进了大海。硕大的身躯,把祖国大地划出了华中华南两个地理单元。南滨城区杨柳雪镇与病毒赛跑的竞技者滨州日报滨州网讯他们是与病毒赛跑的竞技者,当接到社区有阳性检测结果后,便开始追踪阳性混管里20个人员信息和位置,并第一时间与混阳人员取得联系,他们对上连接镇上疫情防控追阳工作,对下人造雪景风靡,浪漫网红暗藏玄机最近,一种飞雪喷雾在短视频平台上走红,它外观形似喷雾剂,轻轻按压,就能喷出仿真雪花般的泡沫,营造漫天飞雪的氛围。但美景背后,却也暗藏隐患。眼看2022年就要过完了,各类庆典活动用的广东暖心小人物积极传播真善美,在平凡中创造不平凡在广东,总不乏来自身边的榜样,他们或是个人,或是群体,用实际行动向上向善,让平凡人的力量折射出耀眼的时代光芒。今年6月起,南都N视频持续推出广东暖心小人物系列报道,从深圳独腿球王到阳了吃什么恢复快?专家建议忌2样,吃4样,早知道少受罪俗话说病来如山倒,身边不少朋友从一道杠生成了两道杠,身体所反映出的各种不适,让人只能躺在家中休养,等待着免疫力成功战胜病毒。俗话说病从口入,正确的饮食可以加速身体的恢复,而不当的饮1226历史上的今天,居里夫人发现了镭?美国总统日本首相去世?居里夫人发现镭时间1898年居里夫人在这一天,发现了化学元素周期表的镭,大家应该在课文中都学过。蔡元培担任北京大学校长时间1916年在其担任校长之后,开学术和自由的风气,凭借自己革票面利率4。3,碧桂园再发行10亿元全额担保中票12月26日,碧桂园地产2022年度第二期中期票据完成发行,规模10亿元,期限3年,最终票面利率低至4。3。公开资料显示,碧桂园地产此前已于2022年2月25日完成中期票据注册,本不怕杀虫剂?越南和柬埔寨出现变异超级蚊子近日,国外一研究所对越南和柬埔寨两国的蚊子展开研究,发现当地的蚊子发生了变异,对常见的杀虫剂产生了免疫。据外媒报道,在柬埔寨和越南的这种蚊子不但会传播登革热黄疸病和寨卡病毒,并且出全球领先!江西首富成世界锂王,手握18项锂资源文文学科技社众所周知,作为目前全球顶尖的新能源汽车企业,特斯拉无论是在股价还是在科研实力方面都十分出色。从这一点也能够看出来,新能源汽车的规模不断扩大,很有可能在未来替代传统汽车成
被海底捞抛弃的男人,买下新加坡公主府邸作者Quasimodo海底捞亏麻了前阵子,人们为啥不爱吃海底捞了的话题上了热搜,当天该话题阅读量就将近4亿次,讨论次数超过2万次。许多网友的言论里,无不透露出对价格的不满太贵,我不微众银行聚焦绿色出行产业,解电动车商家资金压力开拓市场好帮手2019年4月15日,电动自行车安全技术规范实施,两轮电动车行业迎来发展风水岭。数据显示,自2019年开始,两轮电动车的年销量仍在不断上升,2021年我国电动两轮车保有量达到3。4磕磕绊绊赢球,蔡斌选错一人让李盈莹压力倍增,发生了什么?把过多的关注放在女篮世界杯上,女排世锦赛开赛的重要消息也忽视了,直到开场才发现龚翔宇缺席,顿时感到不妙。朱婷张常宁养伤,这次女排世界锦标赛成绩方面多数球迷并没有抱很大的期望,如果蔡今日猪价行情猪价再创年内新高,但上行压力增加今日猪价行情行情宝数据显示,全国生猪均价为12。17元斤,与昨日相比上涨0。09元斤。今日全国生猪价格以涨为主。其中猪价上涨省份20个,无下跌省份,其他均稳定。分地区看东北地区以涨这一局中国赢!欧盟感到了压力,计划加速赶超中国新能源汽车大家可能从来没有想到过吧?不知不觉中,中国在汽车产业的地位竟如此令世界瞩目!好像就在昨天,燃油车时代,中国人似乎还很难找到自信,深感国产汽车与世界的差距,我们提出赶超日本,赶超欧美压力给到台积电,英伟达要求台积电,两个月内完成芯片订单台积电作为全球最大的芯片代工厂,在全球半导体行业拥有举足轻重的地位,然而让人万万没有想到,哪怕是台积电也会被逼上绝路,来自美国的高科技巨头,要求台积电在两个月内交出芯片,压力无疑是探索二号返航!完成深海地质原位观测及国产化装备海试任务IT之家9月25日消息,据央视新闻报道,今日,探索二号搭载深海勇士号4500米级载人潜水器返航,顺利完成深海地质原位观测及国产化装备海试任务。该航次利用深海勇士号4500米级载人潜压力大的男人适合吃哪些食物,这几种食物更能补充身体你知道吗男人想要身体好,除了韭菜还能吃什么,男人压力大上班熬夜浪费精力,靠吃能补回来吗,有哪些适合男人吃的食物,现代男人压力有很大,尤其是戴口罩的这几年,刚成家立业的,不仅要面临车贷,房贷甘肃倡议每个家庭反对高价彩礼家家都有儿女,多换位思考近年来,受多种因素的影响,有的地方婚嫁活动中高价彩礼大操大办随礼攀比低俗婚闹等问题时有反映,有的地方离婚率比较高,给婚姻家庭带来矛盾纠纷,给社会带来不安定因素。(资料图)来源摄图网甘肃省乡村产业发展推进会在武威召开王嘉毅出席并讲话全省乡村产业发展推进会在武威召开王嘉毅出席并讲话每日甘肃网武威讯(新甘肃甘肃日报记者金奉乾)全省乡村产业发展推进会议9月20日至21日在武威市召开。省委副书记王嘉毅出席会议并讲话。怕协在行动星期天上午,天气特别好,大街上匆匆忙忙走来一个人。他身穿风衣,头戴礼帽,鼻梁上还戴着一副墨镜。他不断地东张西望,来到一条小胡同前,回头看看没有尾巴,便快步走了进去。没走几步,迎面走