异常处理
Posted baohanblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。
一、什么是异常处理
异常是错误发生的信号,一旦程序出错就会产生一个异常,
如果该异常没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止。
异常包含三个部分:
- traceback异常的追踪信息
- 异常的类型
- 异常的信息
错误分为两大类:
1.语法上的错误:在程序运行前就应该立即修正
2.逻辑上的错误
二、为何要异常处理
避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性
三、如何异常处理
try: #try监听下面的代码块
代码1
代码2
代码3
......
except NameError:
当抛出的异常时 NameError时执行的子代码块
# 异常处理:
try:
print('====>1')
print('====>2')
print('====>3')
l = [1,2,3]
l[100] #IndexError #运行到此处直接跳到except下的代码块
print('====>4') #不执行
except IndexError:
print('IndexError')
#异常处理多分支
try:
print('====>1')
print('====>2')
print('====>3')
l = [1,2,3]
d = {'x':1,'y':2}
d['z'] #KeyError
l[100] #IndexError #运行到此处直接跳到except下的代码块
print('====>4') #不执行
except IndexError:
print('IndexError')
except KeyError:
print('KeyError')
print('other code')
try:
print('====>1')
print('====>2')
print('====>3')
l = [1,2,3]
d = {'x':1,'y':2}
# d['z'] #KeyError
# l[100] #IndexError
print('====>4') #不执行
except (KeyError,IndexError) as e: #(KeyError,IndexError)捕捉其中一种异常
print(e)
万能异常类型 Exception :可以捕捉任意类型的异常
try:
print('====>1')
print('====>2')
print('====>3')
l = [1,2,3]
d = {'x':1,'y':2}
d['z'] #KeyError
l[100] #IndexError
print('====>4') #不执行
except Exception as e: # as 给异常起别名
print(e)
print('other code')
try + else...: else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行
try:
print('=====1')
print('=====2')
print('=====3')
d = {'x': 1, 'y': 2}
# d['z'] # KeyError
# xxx
print('=====4')
l = [1, 2, 3]
# l[1000] # IndexError
print('=====5')
except IndexError as e:
print('IndexError:', e)
except KeyError as e:
print('KeyError:', e)
except Exception as e:
print('Exception:',e)
else:
print('else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行')
print('other code')
try + finally... :无论finally前面被检测的代码有没有异常都会执行
try:
f=open('a.txt','w')
print('=====1')
print('=====2')
print('=====3')
d = {'x': 1, 'y': 2}
# d['z'] # KeyError
# xxx
'xx' > 10
print('=====4')
l = [1, 2, 3]
# l[1000] # IndexError
print('=====5')
except IndexError as e:
print('IndexError:', e)
except KeyError as e:
print('KeyError:', e)
# except Exception as e:
# print('Exception:',e)
else:
print('else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行')
finally:
print('无论被检测的代码有没有异常都会执行')
f.close()
# 主动触发异常
print('===>1')
print('===>2')
raise TypeError('类型错误')
print('===>3')
class People:
def __init__(self,name,age):
self.__name=name
self.__age=age
def tell_info(self):
print(self.__name,self.__age)
def set_info(self,name,age):
if not isinstance(name,str):
raise TypeError('名字必须是str类型')
if not isinstance(age,int):
raise TypeError('年龄必须是int类型')
self.__name=name
self.__age=age
obj=People('egon',18)
# print(obj.__dict__)
# obj.tell_info()
obj.set_info('egon',123)
obj.tell_info()
#自定义异常类型
class MyException(BaseException):
def __init__(self,msg):
super().__init__()
self.msg=msg
def __str__(self):
return '<%s>' %self.msg
raise MyException('我自定义的异常')
以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章
java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段