专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Python程序设计错误与异常

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

谈谈你们是如何上军校的?哨兵小虎第863条回答。能上军校是所有士兵的梦想,小虎由于学历太低,成绩也不佳,没能走进军校的大门,但在部队里呆了12年,经历过很多战友上军校时的喜悦。在部队机上军校主要有两种途径登上月球的人都发现了什么惊人的东西?40年前美国登月宇航员怪病缠身,40年后中国玉兔号月球车离奇故障,令人震惊的是,罪魁祸首竟然是它。美国登月的12名宇航员在回到地球后全都得了一种怪病,他们还声称从月球返回太空舱后闻微信里有几个网购优惠券的群,也使用过里面的优惠券。这段时间发现一个问题,我这几天在网上搜索过的东西,或者下单购买的东西,一两天之后就在优惠群里看到有推荐相关的,是不是我的网购信息泄露了?这个问题可以通过三个方面来回答第一这是很正常的,没有什么奇怪的,不管你在哪里买过什么东西,或者搜索过什么东西都有痕迹的,他们都会留有你的信息的,我们平常在手机上经常在搜索栏里搜一些新疆除了干果还有什么值得给内地亲戚带的东西?1。新疆的馕玫瑰花酱馕芝麻油馕皮芽子馕辣皮子馕奶馕花生馕小油馕2。新疆伊犁的野生蜂蜜,都是纯天然的蜂蜜3。新疆的果酱树莓酱杏酱蓝莓酱野果酱黑加仑酱无花果酱,都是无添加剂的果酱4。新人体的毛发都有什么用?腋毛鼻毛等部位的毛可以剃吗?谢邀,悟空回答!我来谈谈自己的看法!众所周知,我们从生下来的时候,身体就存在毛发!那我们身体各部位的毛发的作用究竟是什么?一头发的作用1。防日晒御寒阳光中的紫外线照射可促进黑素的生水有重力且无孔不入,为什么没有全部渗入地球内部,而仅仅在地球表面循环?几个原因。一地球内部温度一直很高。之前有个报道,说中国科学家在青海3705米深处钻获236高温干热岩。研究者们认为,中国陆域干热岩资源量为856万亿吨标准煤,根据国际标准,以2作为太阳表面一秒钟散发出来的能量总和,能够支持全球用多久?为什么?太阳表面一秒钟散发出来的能量总和,能够支持地球人所需能量用多久?太阳内部的核聚变在太阳形成的初期,其所在区域原本是由众多星际物质(以氢为主的气体物质和固体星际尘埃),在受到其它引力比特币挖矿机浪费那么多电能够产生什么对人类有用的东西?这个问题问得很好,是一个值得深思的问题。货币是价值的载体,是一般等价物。黄金是天然的货币,纸币是国家凭主权创设的货币,比特币是互联网上凭共识创设的货币。我们可以作一个比较美国淘金热如果地球把地球比作有一个硬币那么大,那么太阳有多大?第五套人民币的1元硬币直径是2。5厘米,太阳的直径是地球的109倍。如果地球的直径是1元硬币这么大,太阳的直径应该是272。5厘米。下图就是太阳和太阳系各大行星的直径对比!最前排左一张纸对折105次,宇宙真的就放不下了吗?类似的题,我在小学时第一次遇到,那道题是一张纸对折30次,高度能不能超过珠穆朗玛峰?刚看见这道题的时候,理所当然的认为,这怎么可能,要知道一张纸是多么的薄,对折30次怎么可能比珠穆你在马路上遇到过电单车的无理行为吗?说起这个电单车的无理行为我的确是要吐槽一下的。每天我踩单车去地铁站,路上总会遇到一些电单车,有些人骑电单车真的有很多不好的行为啊!他们骑着电单车,遇到前面有行人或者骑单车的人在堵住
解读二十大报告之能源转型新型能源体系需要补哪些短板二十大报告提出加快规划建设新型能源体系,积极参与应对气候变化全球治理。那么如何理解中国乃至全球正在经历的能源变革?协鑫集团董事长朱共山接受第一财经记者专访时表示要构建新型能源体系,德国有一档案,揭露出斯大林长子的死亡原因,却无人敢告诉斯大林雅科夫图片来自网络1945年5月8日,德国宣布无条件投降,欧战结束。随即,一支由英美专家组成的联合小组进入柏林。可就在他们整理德国档案材料的时候,意外地发现了有关斯大林长子雅科夫在大桥被炸,第2天就轰炸乌克兰,历史上,俄国一直这么有仇必报就在前几天,当具有十分重要象征意义的克里米亚大桥被乌克兰炸了的第2天,俄罗斯的导弹就袭击了包括乌克兰首都基辅在内的多个城市,俄罗斯的报复,可谓又快又准又狠。这样有仇当场就报的行事风神回复老家祖坟怎么冒出一颗笋?有什么说法?神评这是要笑死我你追的过吗?这个人一定瘦不到哪儿去。做演员真的是太辛苦了。小狗狗,你是不是特别喜欢你的小主人呀!所以这是什么电缆?我可以叫你一声小李姐姐吗?他有什么原因,让女孩子这么喜欢他?他精神囟门是孩子健康的晴雨表,透过囟门了解宝宝健康,妈妈要学会很多宝妈都以为宝宝只有一个囟门,即前囟门,就是在脑门上方一点的位置,其实在宝宝的后脑勺的位置还有一个后囟门,因为后囟门闭合得较早,加上位置不如前囟门明显,所以,很容易被宝妈们忽视了赶紧码住30个省钱小建议缺钱的女孩一定要看图片来源网络我以前是一位体制内的医生,后来有了孩子,为了她更好的教育,我便辞职了。虽然在医院工作的那几年有一定的存款,但全职妈妈没有收入,再加上孩子就是个小吞金兽,只能是能省则省。益生菌的好处多多,选对合适的益生菌很重要说起益生菌,想必大家都不陌生,酸奶,泡菜,纳豆等等许多的发酵食品多含有益生菌,而说起益生菌的好处,改善肠道功能,促进消化吸收,增加免疫力,抑制其他有害菌的生长,保护肠道的黏膜屏障等好霸气!90后家长给娃取名张总登上热搜,妈妈没办法平凡每一位学生的家长,都会对自己的孩子寄予厚望,希望他们在上学的时候认真对待学业,努力考取更加优质的学校接受教育,将来毕业以后,争取为祖国的发展做出贡献。所以,家长们从给娃取名开始,就I。1。4什么途径能尽量发现和拓展孩子的天赋潜能?通常,宝宝满月后就可以短暂地带到户外呼吸新鲜空气晒晒早晨或傍晚的柔和阳光接受外界的各种刺激。随着成长,外出的时间逐渐延长,阳光的强度也可以稍稍增加。但任何时候都不能曝晒,这是即使成母乳中发现微塑料,正危害孩子健康!生活中该如何避免?据红星新闻,根据发表在聚合物(Polymers)期刊的一项最新研究表明,科学家首次在人类母乳中发现了微塑料颗粒的存在,其对婴儿的潜在健康影响目前仍未可知。这一研究是由曾在人类胎盘中抄袭小孩的画便能大卖,也许是因为思无邪吧在浙江杭州有一位父亲,靠着抄袭自己女儿的画作出了名。据称他是这样子做的他给自己女儿颜料和画笔,让她随心所欲的绘画。然后自己再去寻找其中准确的概念把它抽象出来。有可能是孩子的童真意趣
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网