python的异常,以及用try复合语句处理异常。
运行代码时有时会出现各种各样的错误,致使解析器中断执行,并提示xxxxxxErorr的提示,后面跟具体的错误的描述,这被称为是引发了异常。
其实异常告诉我们的是遇到了什么类型的错误。xxxxErorr就是python内置的异常类型。每一种异常类型,都有它自己的错误信息。
有一种比较容易辨识,容易处理的错误,语法错误:SyntaxError
是由于写代码时的语法错误,大部分的解析器都会提前提示,像pycharm,在书写时如果语法错误,都会有波浪线提示。语法上的错误很好处理,类似与写文章写错字了,改正就行了。
如何处理异常:
除了语法错误能轻松搞定,其他有些异常类型不影响代码的功能,而又不想让异常中断执行时,就要对异常进行处理,而不让他中断程序:
例如:有一个字典personDetail={"name":“光头强”}里边是光头强的资料,想取到它的资料,但具体都有什么资料我们不知道,如果输入的键不存在就会引发异常而中断执行。致使后面的代码也为无法执行。
那么就要捕获这些异常,绕过它,能让下面的代码继续运行。python提供了try语句来实现这些功能。
语法:
try:
可能发生异常的代码
except 异常类型:
捕获的异常后要执行的代码
try 语句的工作原理如下。
1)执行 try 子句时如果没有异常发生,则跳过 except 子句并完成 try 语句的执行。
2)如果在执行try 子句时发生了异常,则跳至except子句。
3)执行 except 子句 ,如果引发异常的类型和 except 关键字后面的异常匹配,就是捕获了异常,执行except子句。
例如:
gtqDict={"Name":"光头强","Age":34,"Gender":"男" try: print(gtqDict["Weight"]) except KeyError: print("Weight不存在,继续走" print(gtqDict["Age"]) print(gtqDict["Gender"])
例子不管weight是否存在,都能使得程序完。
捕获多个异常:
有时不确定会发生哪种异常,就把异常类型以元组的形式组包统统放在except后面,来匹配可能发生的异常:
比如:要打印光头强年龄的Age键,不确定这个键是否存在,就用KeyErorr,不确定会不会发生键名是否正确,就用NameErorr。
例如:
gtqDict={"Name":"光头强","Age":34,"Gender":"男" try: print(gtqDict["age"]) except (KeyError,KeyError): print("age错误" print(gtqDict["Name"]) print(gtqDict["Gender"])
捕获异常的描述信息:可以将异常的具体描述打印出来,以供参考。
try:可能发生异常的代码
except (KeyError,KeyError) as 信息变量:
print(信息变量)
例如:
gtqDict={"Name":"光头强","Age":34,"Gender":"男"} try: print(gtqDict["Weight"]) except (KeyError,KeyError) as e: print(type(e),e) print(gtqDict["Name"]) print(gtqDict["Gender"])
捕获所有异常:
前面提过,引发异常的xxxxErorr都是python异常的类型。python中所有异常类型都是基类Exception的派生类。
那么在写代码的时候不用指定异常的具体类型,只要捕获基类就等于捕获了所有的异常,但输出的是具体的异常信息,这很有利于在大范围内找到具体的错误。
语法:
try:可能发生异常的代码
except Excepthon as 信息变量:
print(信息变量)
例如:
gtq="光头强" try: print(name) except Exception as e: print(type(e),e print("gtq") ---<class 'NameError'> name 'name' is not defined ---gtq
异常里的else子句:
else子句是可选的,如果使用,必须放在所有的except子句之后。
它是在try子句没有发生异常的情况执行。
例如:
gtq="光头强" try: name=gtq except Exception as e: print(type(e),e) else: print("%s是一个伐木工人"%name)
finally子句: 写在try语句的最后。
不管 try 子句里面是否有异常,finally 子句都会执行。
例如:
gtq="光头强" try: name=GTQ except Exception as e: print(type(e),e) else: print("%s是一个伐木工人"%name) finally: print("调用资料结束") ---<class 'NameError'> name 'GTQ' is not defined ---调用资料结束
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 纯音入心系列纯音乐《中央民族乐团-古筝传奇》1CD[MP3][253.1MB]
- 江玲.1989-这样你才爱我,是吗?【新作有声】【WAV+CUE】
- 郭美美.2010-我是郭美美【华纳】【WAV+CUE】
- 黄心懋1991-轻忧郁【滚石】【WAV+CUE】
- 群星.2000-大地金曲世纪回顾2CD【大地】【WAV+CUE】
- 王菲.1996-浮躁(2024环球MQA-UHQCD限量版)【环球】【WAV+CUE】
- 群星.2022-传家电视剧原声带【东阳欢娱】【FLAC分轨】
- 《摇滚教父 伍佰黄金精选 2CD》 [WAV+CUE][1GB]
- 《凤凰传奇 我从草原来》[WAV/分轨][400MB]
- 《叶倩文 真心真意过一生》[WAV+CUE][400MB]
- 潘越云.1985-世间女子(滚石25周年经典复刻版)【滚石】【WAV+CUE】
- 陈柏宇.2009-CANT.BE.HALF【SONY】【WAV+CUE】
- 李明依.1989-小女生【滚石】【WAV+CUE】
- 《李荣浩 新时代创作新人王》[WAV分轨][310MB]
- 《黑鸭子与马头琴 史上最动听草原音乐》[WAV+CUE][320MB]