异常处理

1 什么是异常处理:

   异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常

    没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止

    异常包含三个部分:

        1. traceback异常的追踪信息

        2. 异常的类型

        3. 异常的信息

    错误分为两大类:

        1. 语法上的错误:在程序运行前就应该立即修正

        2. 逻辑上的错误

2. 为何要异常处理

    避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性

3.如何异常处理

try:
    代码1
    代码2
    代码3
    ......
except NameError:
    当抛出的异常是NameError时执行的子代码块
except ....:
    pass
except ...:
    pass
else:
    pass
finally:
    pass
print('adsfsadf')

age=input('>>: ').strip()
print(age > 10) #TypeError

for i in 10: #TypeError
    pass

import os
os.xxx #AttributeError

1 / 0 #ZeroDivisionError:

print('=====1')
print('=====2')
print('=====3')
l=[1,2,3]
l[1000] #IndexError
print('=====4')
d={'x':1,'y':2}
d['z'] #KeyError
print('=====5')
View Code常见的逻辑错误导致的异常
try:
    print('=====1')
    print('=====2')
    print('=====3')
    d = {'x': 1, 'y': 2}
    d['z']  # KeyError
    print('=====4')
    l = [1, 2, 3]
    l[1000]  # IndexError
    print('=====5')
except IndexError:
    print('IndexError')

print('other code')
View Code异常处理的单分支
try:
    print('=====1')
    print('=====2')
    print('=====3')
    d = {'x': 1, 'y': 2}
    d['z']  # KeyError
    print('=====4')
    l = [1, 2, 3]
    l[1000]  # IndexError
    print('=====5')
except KeyError as e:
    print('KeyError',e)
except IndexError as e:
    print('IndexError',e)


print('other code')
View Code异常处理的多分支
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)

print('other code')
View Code万能异常类型Exception:可以匹配任意类型的异常
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')
View Codetry... else...
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()
View Codetry... finally...
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()
View Code 主动触发异常
# 自定义异常类型(了解)
class MyException(BaseException):
    def __init__(self,msg):
        super().__init__()
        self.msg=msg

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

raise MyException('我自定义的异常')



# 断言(了解)
print('上半部分,生产数据')
l=[1,2,3,4]

# if len(l) != 5:
#     raise TypeError('列表的长度必须为5')
assert len(l) == 5

print('下半部分,处理数据')
原文地址:https://www.cnblogs.com/xuecaichang/p/9544253.html