exception.py

try:
    raise Exception
except Exception as e:
    print(e)

try:
    raise Exception('comment')
except Exception as e:
    print(e)


class SomeException(Exception):
    print('aa')
    pass
try:
    raise SomeException #只能捕获这个异常,不能捕获其他如1/0异常
except SomeException:   #这个为什么不行
    print('no')

'''
try:
    a=0
    1/0
except ZeroDivisionError:
    if a==1: print('no problem')
    else: raise  #捕捉到了异常,但又想重新引发它
'''
#多个except语句
#只有第一条语句的错误发现,然后捕获这个异常后,后面语句的异常不会被捕获
try:
    a=1/0
    b='a'+1
except TypeError:
    print('1')
except ZeroDivisionError:   
    print('2')
#结果是2

#一个块捕获多个异常
#也只能捕获第一个异常
try:
    a=1/0
    b='a'+1
except (TypeError,ZeroDivisionError):   
    print('error')


try:
    b='a'+1
    a=1/0
except (ZeroDivisionError,TypeError) as e:  #捕捉对象 
    print(e)
#Can't convert 'int' object to str implicitly捕捉第一条语句

#全捕捉
try:
    a=1/0
    b='a'+1
except:   
    print('error')

#else 语句
while True:
    try:
        x=input('x')
        y=input('y')
        print(x/y)
    except:
        print('invalid, input again')
    else:   #没有异常引发的情况下执行
        break

#finally 语句
#finally 用于关闭文件或网络套接字时会非常有用
#不管是否发生异常,finally一定会被执行
#sys.exit退出当前程序,finally中内容仍然会被执行
#x被初始化为None原因,由于ZeroDivisionError存在,x就永远不会被赋值
#这样就导致在finally中使用del删除它的时候产生异常,而且这个异常是无法捕捉的
x=None
try:
    x=1/0
finally:    #finally 要与 try 对齐
        print('cleaning up')    #在程序崩溃前,对x的清理已经完成了
        del x

try:
    1/0
except ZeroDivisionError:
    print('1')
else:
    print('2')
finally:
    print('3')
#结果1,3
原文地址:https://www.cnblogs.com/feifeidxl/p/5617889.html