丨异常处理如何提高程序稳定性_第1页
丨异常处理如何提高程序稳定性_第2页
丨异常处理如何提高程序稳定性_第3页
丨异常处理如何提高程序稳定性_第4页
丨异常处理如何提高程序稳定性_第5页
已阅读5页,还剩19页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首先要了解,PythonifnameisnotIf语句漏掉了冒号,不符合Python的语范,所以程序就会报错invalidsyntax比如下面的3个例子:110/Traceback(mostrecentcallFile"<stdin>",line1,inZeroDivisionError:integerdivisionormoduloby5order*Traceback(mostrecentcallFile"<stdin>",line1,inNameError:name'order'isnot111+[1,Traceback(mostrecentcallFile"<stdin>",line1,inTypeError:unsupportedoperandtype(s)for+:'int'and0;也不能使用未定义的变量做运PythonKEror是指字典中的键找不到;lNtFnEro是送了文请求相应件不等等在此不刚刚讲到,如果执行到程序中某处抛出了异常,程序就会被终止并退出。你可能会问,那有没有什么办法可以不终止程序,让其照样运行下去呢?答案当然是肯定的,这也就是我们所说的异常处理,通常使用try和t来解决,比如:2345

s=input('pleaseentertwonumbersseparatedbycomma:')num1=int(s.split(',')[0].strip())num2=exceptValueErrorasprint('ValueError:8 lforint()withbase10:'a',然后跳出try这个block。由于程序抛出的异常类型是ValueError,和exceptblock所catch的异常类型相匹配,所以exceptblock便会被执行,最终输出ValueError:invalidli lforint()withbase10:'a',并打印出continue。pleaseentertwonumbersseparatedbycomma:ValueError:invalid lforint()withbase10:我们知道,exceptblock只接受与它相匹配的异常类型并执行,如果程序抛出的异常并不所以,还是刚刚这个例子,如果我们只输入1,程序抛出的异常就是IndexError:listindexoutofrange,与ValueError不匹配,那么exceptblock就不会被执行,程序便会终止并退出(continue不会被打印)。pleaseentertwonumbersseparatedbycomma:IndexErrorTraceback(mostrecentcallIndexError:listindexoutof其中一种解决方案,是在exceptblock中加入多种异常的类型,比如下面这样的写法:2345

s=input('pleaseentertwonumbersseparatedbycomma:')num1=int(s.split(',')[0].strip())num2=6except(ValueError,IndexError)as print('Error:89101 23ycomma:')num1=num2=s='bexceptValueErrorasprint('ValueError:exceptIndexErrorasprint('IndexError:1112这样,每次程序执行时,exceptblock中只要有一个exception一个exceptblock,其处理的异常类型是Exception。Exception是其他所有非系统12345

s=input('pleaseentertwonumbersseparatedbycomma:')num1=int(s.split(',')[0].strip())num2=exceptValueErrorasprint('ValueError:exceptIndexErrorasprint('IndexError:exceptExceptionasprint('Othererror:except(包括系统异常 3put('pleaseentertwonumbersseparatedbycomma:')num1snum2==exceptValueErrorasprint('ValueError:exceptIndexErrorasprint('IndexError:print('Other需要注意,当程序中存在多个exceptblock时,最多只有一个exceptblock会被执行。换句话说,如果多个except的异常类型都与实际相匹配,那么只有最前面的exceptblock会被执行,其他则被忽略。异常处理中,还有一个很常见的用法是finally,经常和try、except放在一起来用。无论发生什么情况,finallyblock中的语句都会被执行,哪怕前面的try和excepblock中使用了return语句。importf=open('file.txt',....#somedataexceptOSErrorasprint('OSerror:print('Unexpectederror:',这段代码中,tryblock尝试file.txt这个文件,并对其中的数据进行一系列的处理,到最后,无论是成功还是失败,程序都会执行finally中的语句——关闭这个文件finally无论如何都要执行的语Python答案是肯定是,Python型MyInputError,定义并实现了初始化函数和str函数(直接print时调用):class"""Exceptionraisedwhenthere'reerrorsin4 67

init(self,value):#self.value=str(self):#stringreturn("{}isinvalidraiseMyInputError(1)#抛出MyInputErrorexceptMyInputErrorasprint('error:1error:1isinvalidPython内置的异常类型就足够好了。常处理。除了上述文件的例子,我可以再举一个例子来说明大型社交的,需要针对用户发送的请求返回相应记录。用户记录往往在key-valueIDIDjsonstringjsonimportraw_data=queryDB(uid)#根据用户的iddata=要知道,在json.loads()函数中,输入的字符串如果不符合其规范,那么便无法,就23

data=exceptJSONDecodeErrorasprint('JSONDecodeError:1d={'name':'jason','age':value=exceptKeyErrorasprint('KeyError:诚然,这样的代码并没有bug,但是让人看了摸不着头脑,也显得很冗余。如果你的代码中充斥着这种写法,无疑对阅读、协作来说都是。因此,对于flow-control(流程控if'dob'invalue=Pythonfinallyblock据库的连接、等等。正常的flow-control逻辑,不要使用异常处理,直接用条件语tryblock用多个tryexceptblock吗?以数据库的连接、为例,下面两种写法,你觉得哪种更 db='<dbpath>')#可能会抛出raw_data=DB.queryData('<viewer_id>')#except(DBConnectionError,DBQueryDataError)print('Error:23456

db=DB.connect('<dbpath>')#raw_data=DB.queryData('<viewer_id>')exceptDBQueryDataErroraserr:print('DBquerydataerror:exceptDBConnectionErrorasprint('DBconnectionerror: 售卖。页面已增加防盗追踪,将依 上一 07|基本功:条件与循下一 09|不可或缺的自定义函言言 16不瘦到 e=11/exceptZeroDivisionErroras作者回复:你可以阅读文档"Whenanexceptionhasbeenassignedusingastarget,itisclearedattheendoftheexceptclause."比如下面这个codeblock:exceptEasN:exceptEasN:del 10第法简单明了,是不是少了一个 作者回复:我会在最后一章里对大公司开发的规范,流程做一个详细的介绍。通常来说,异常能用对其进行Log(一般每1000次log一次),输出到realtime的table和dashboard里,这样有利于 2②读起来太难受,太不 2John try語句,從而增加了程序運行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论