python异常处理

1.捕捉到异常后,出现异常的语句之后的代码就都不执行了,上代码:

try:
    print(name)
    print(1)
    print(2)
    print(3)
except NameError as e:  #将异常的值赋给e
    print('异常%s'%e)
#异常name 'name' is not defined

2.如果有多个异常可以用多分支异常来处理,同样每次只会捕捉到一个异常,然后之后的代码不会执行,即使也是有其他异常捕捉的代码:

try:
    # print(name)
    print(1)
    print(2)
    dic = {}
    print(dic['name'])
    print(3)
except NameError as e:
    print('异常%s'%e)
except KeyError as e:
    print('异常%s'%e)
#异常name 'name' is not defined

3.异常捕捉中也会用到else,else内的代码如果执行的话,必须else之前没有异常产生:

try:
    # print(name)
    print(1)
    print(2)
    dic = {}
    # print(dic['name'])
    print(3)
except NameError as e:
    print('异常%s'%e)
except KeyError as e:
    print('异常%s'%e)
else:
    print('ok')
#1
#2
#3
#ok

4.无论异常有没有产生都会执行的代码,需要用到finally:

try:
    print(name)
    print(1)
    print(2)
    dic = {}
    # print(dic['name'])
    print(3)
except NameError as e:
    print('异常%s'%e)
except KeyError as e:
    print('异常%s'%e)
else:
    print('ok')
finally:
    print('管它三七二十一')
#异常name 'name' is not defined
#管它三七二十一
try:
    # print(name)
    print(1)
    print(2)
    dic = {}
    # print(dic['name'])
    print(3)
except NameError as e:
    print('异常%s'%e)
except KeyError as e:
    print('异常%s'%e)
else:
    print('ok')
finally:
    print('管它三七二十一')
#1
#2
#3
#ok
#管它三七二十一

 5.主动触发异常,代码本身正常执行不会触发异常,只是我们想‘规范代码的执行逻辑’,比如:

words = input('please input your age:').strip()
if not words.isdigit():
    raise TypeError('必须输入数字!!!')
#please input your age:abc
#Traceback (most recent call last):
#  File "E:/pythondir/异常处理/exception_deal.py", line 3, in <module>
#    raise TypeError('必须输入数字!!!')
#TypeError: 必须输入数字!!!

 6.断言,assert后面的条件不满足就会触发异常:

words = input('please input your age:').strip()
assert words.isdigit()
print('im %s years old'%words)
#please input your age:abc
#Traceback (most recent call last):
  File "E:/pythondir/异常处理/exception_deal.py", line 2, in <module>
#    assert words.isdigit()
#AssertionError

7.自定义异常,即自定义一个异常类:

class myexceptinon(BaseException):
    def __init__(self,msg):
        super().__init__()
        self.msg = msg
    def __str__(self):
        return self.msg

if 1 == 1:
    raise myexceptinon('没有定义')
#Traceback (most recent call last):
  File "E:/pythondir/异常处理/exception_deal.py", line 13, in <module>
    raise myexceptinon('没有定义')
#__main__.myexceptinon: 没有定义
原文地址:https://www.cnblogs.com/thanos-ryan/p/13811792.html