九、异常处理

1.什么是异常

#异常是错误发生的信号,一旦程序出错,就会产生一个异常,应用程序未处理该异常异常便会抛出,程序随之终止

 

2.异常信息三部分

#1.追踪信息
#2.异常的类型
#3.异常的值

 

3.常见的异常类型

##3.1语法错误应该在程序运行前修正
if 1 >2     #少一个:冒号     结果:SyntaxError: invalid syntax
    print ('sss')

##3.2 逻辑错误
x   #结果:NameError: name 'x' is not defined

l=[]    #结果:IndexError: list index out of range
l[10000]

class Foo:
    pass
Foo.x   #结果:AttributeError: type object 'Foo' has no attribute 'x'

k={'x':1}
k['y']      #结果:KeyError:'y'

for i in 3:     #结果TypeError:'int' object is not iterable
    pass

str1='a'
int(str1)  #ValueError:invalid literal for int() with base 10:'a'

4.如何处理异常

#基本格式
print ('===start===')
try:
    l=[]
    l[1000]=10
    print ('hello')
except IndexError:
    pass
print ('===end===')

#输出异常值
print ('===start===')
try:
    l=[]
    l[1000]=10
    print ('hello')
except IndexError as e: #e为异常的值
    print (e)
print ('===end===')

#Exception
print ('===start===')
try:
    l=[]
    l[1000]=10
    print ('hello')
except Exception as e:  #万能匹配异常
    print ('万能异常--》'e)

print ('===end===')

#匹配多个异常值,try里面代码块,只执行一次异常处理expect
print ('===start===')
try:
    l=[]
    l[1000]=10
    print ('hello')
    d={}
    d['a']
except IndexError as e:
    print (e)
except KeyError as e:
    print (e)
print ('===end===')

#else
print ('===start===')
try:
    print ('hello')
except Exception as e:
    print (e)
else:
    print ('没有异常触发')
print ('===end===')

#finally
print ('===start===')
try:
    print ('hello')
except Exception as e:
    print (e)
finally:
    print ('不管有没有异常都触发')
print ('===end===')

# #raise
stus=[]
if len(stus) ==0:
    raise TypeError     #主动触发TypeError类型异常

for i in stus:
    print (i)

##assert
stus=[]
assert len(stus) !=0    #断言成功继续执行,断言失败报AssertionError错误
for i in stus:
    print (i)

 

#自定义异常
class MyException(BaseException):
    def __init__(self,msg):
        super(MyException,self).__init__()
        self.msg=msg

    def __str__(self):
        return '<%s>'%self.msg

raise MyException('类型错误')

结果:
Traceback (most recent call last):
  File "D:/practice_ATM/AMT1/day08.py", line 41, in <module>
    raise MyException('类型错误')
__main__.MyException: <类型错误>

 

5.什么情况下使用异常处理

#在无法预测即将发生的事时,可以使用异常判断预防

 

posted @ 2018-05-23 16:45  森林326  阅读(142)  评论(0编辑  收藏  举报