python3--异常处理

python中的异常捕获、异常处理语句关键字有try、except、else、finally,主要组合如下:

1.不捕获异常,不管是否异常仍要执行操作(finally)

先执行finally中的语句,再抛出异常。

# 不捕获异常,抛出异常后,仍执行finally中的语句
try:
    print(1/0)
finally:
    print('执行了')
# 执行了
# Traceback (most recent call last):
#   File "/Users/xxx/test.py", line 3, in <module>
#     print(1/0)
# ZeroDivisionError: division by zero

2.捕获所有的异常(最好不要用)

# 捕获所有的异常
try:
    print(1/0)
except:
    print('有异常了')

3.捕获指定的异常

捕获一种异常

try:
    print(1/0)
except ZeroDivisionError:
    print('ZeroDivisionError: division by zero')

同时捕获多种异常(实际上也只是捕获其中的一种,只是可捕获的种类多了)

try:
    print(1/0)
    print(int('he'))
except (ZeroDivisionError,ValueError) as error:
    print(error)

只捕获了ZeroDivisionError异常,输出:'division by zero'

try:
    print(12[0])
    print(int('he'))
except (ZeroDivisionError,ValueError,TypeError) as error:
    print(type(error),'***',error)  

捕获了TypeError异常,输出:<class 'TypeError'> *** 'int' object is not subscriptable

4.只在没有异常时执行(else)

try:
    print('123')
except (ZeroDivisionError,ValueError,TypeError) as error:
    print(type(error),'***',error)
else:
    print('没有异常')

5.可捕获异常,不管有没有异常,都要执行(finally)

先执行except下的语句,再执行finally下的语句。

try:
    print(1/0)
except (ZeroDivisionError,ValueError,TypeError) as error:
    print(type(error),'***',error)  # <class 'ZeroDivisionError'> *** division by zero
finally:
    print('异常也要执行')  # 异常也要执行

6.所有武器齐上阵

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("被除数不能是0")
    else:
        print("除法结果是:", result)
    finally:
        print("执行了finally")

当抛出的异常不在可捕获的异常中时,先执行finally中的语句,再抛出异常

divide('234','456')
# 执行了finally
# Traceback (most recent call last):
#   File "/Users/menghua/Documents/pythonworkspace/flasktest/test.py", line 11, in <module>
#     divide('234','456')
#   File "/Users/menghua/Documents/pythonworkspace/flasktest/test.py", line 3, in divide
#     result = x / y
# TypeError: unsupported operand type(s) for /: 'str' and 'str'

当抛出的异常被捕获,则先执行except中的语句,再执行finally中的语句

divide(123,0)
# 被除数不能是0
# 执行了finally

 没有异常抛出时,先执行else中的语句,再执行finally中的语句

divide(123,12)
# 除法结果是: 10.25
# 执行了finally

7.引发异常raise

先执行except中的语句,再执行finally中的语句

try:
    raise ValueError('抛出异常的提示信息,不加参数则只是会捕获异常,不会有提示信息')
except ValueError as error:
    print(error)  # 抛出异常的提示信息,不加参数则只是会捕获异常,不会有提示信息
else:
    print('没有异常')
finally:
    print('异常也要执行')  # 异常也要执行

ps:以上几种异常处理方式中语句的关键字顺序不可修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值