python throws_Python 快速入门笔记(8):异常处理

本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12299739.html。

简介

Python 中的异常处理有许多与 C++ 中类似的部分,比如 raise 语句与 C++ 中的 throw 语句相似, try-except 语句与 C++ 中的 try-catch 语句相似。

当然也有一些不同的地方,比如:Python 中可以捕获“除数为0”这种运行时错误,而 C++ 就不能,例如:

x = int(input("Enter the first number:"))

y= int(input("Enter the second number:"))try:print("Result is %f" % (x /y))except ZeroDivisionError: #当 y 的值为 0 时,这里就能捕获到异常

print("The second number is zero")

raise 语句:类似与 C++ 中的 throw 语句

除了“除数为0”这种程序自发的错误,我们还可以在某些不合法的情形下,使用 raise 语句人为地抛出异常。

raise 语句可以带一个参数,这个参数必须是一个(继承自 Exception 类的)类或者一个实例对象,如果参数是类的话,会自动创建一个该类的实例对象。

raise 语句也可以不带参数(通常用于 except 语句中,表明已经捕获到了某个异常对象),向上继续传递当前捕获到的异常对象(如果外围没有捕获该异常,则程序中断并报错)。

示例:

deffoo(n):if n < 1:raise Exception #人为抛出异常

while n >0:

x= int(input("Enter the first number:"))

y= int(input("Enter the second number:"))try:print("Result is %f" % (x /y))except ZeroDivisionError: #捕获 除数为0 的异常

print("The second number is zero")raise #继续传递 ZeroDivisionError 异常

n -= 1

try:

foo(5)except: #捕获任意异常

print("An exception was caught, stop running")

一些内置的异常类

下图列举了一些常用的内置异常类:

注:上图截自《Python基础教程》第8章。

try 语句:捕获异常

关于异常捕获:

except 子句可以有多个

except 子句中的异常类型也可以有多种

except 子句中可以仅指定异常类型,也可以捕获异常对象(实例)

except 子句省略任何参数时,可以捕获任意类型异常

else 子句在未有异常发生的时候执行

finally 不管有没有异常发生,也不管发生了什么异常,它总是会执行(并且会在异常传递之前执行)

示例:

deftest(e):try:if (note):pass

else:raiseeexcept ZeroDivisionError: #捕获单个类型异常

print("Caught a ZeroDivisionError exception")except (TypeError, ValueError): #捕获多个类型异常

print("Caught either a TypeError exception or a ValueError exception")except (IndexError, KeyError) as e: #捕获异常对象

print("Caught an exception object", e)except: #捕获任意异常

print("Caught an unknown exception")

raiseelse: #没有异常发生时才会执行

print("No exception")finally: #总是会执行到这里

print("finally")#下面每一次 test() 调用后都会输出 finally,省略了未列出

test(ZeroDivisionError) #Caught a ZeroDivisionError exception

test(TypeError) #Caught either a TypeError exception or a ValueError exception

test(ValueError) #Caught either a TypeError exception or a ValueError exception

test(IndexError) #('Caught an exception object', IndexError())

test(KeyError) #('Caught an exception object', KeyError())

test(Exception) #Caught an unknown exception

test(None) #No exception

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值