python3 中try 异常调试
最近学习到了python如何处理异常,发现一篇比较好的文章,整理了一下,供大家学习研究。
一、什么是异常?
当无法正确处理程序时就会出现异常。当异常发生时我们需要捕获处理它,否则程序会终止执行。
二、基础语法
捕捉异常可以使用try…..except语句。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
try:
检测异常代码段
except:
发生异常后执行代码段
else:
未发生异常执行代码段
finally:
最终执行代码段
三、基本原理
四、具体示例
例子一:
try:
s = input("请输入内容:")
if s is None:
print ("s 是空对象")
print(len(s)) #这句抛出异常
except TypeError:
print("类型错误,空对象没有长度")
else:
print("没有问题,正常执行!")
finally:
print('不管怎样,我都会执行')
例子二:
当在try块中抛出一个异常,立即执行finally块代码。
try:
s = None
if s is None:
print ("s 是空对象")
print(len(s)) #这句抛出异常
except TypeError:
print("类型错误,空对象没有长度")
else:
print("没有问题,正常执行!")
finally:
print('不管怎样,我都会执行')
五、捕获异常的操作
1. 使用except而带多种异常类型
有多个expect的时候会首先执行第一个能被捕获到的异常并且只执行一个。
try:
正常的操作
except(Exception1[, Exception2[,...ExceptionN]]]):
发生以上多个异常中的一个,执行这块代码
else:
如果没有异常执行这块代码
2.使用多层try的时候except的传递
多重异常的处理,可以在try语句中嵌套另一个try语句,一旦发生异常,python匹配最近的except语句。
若是内部except能够处理该异常,则外围try语句不会捕获异常。若是不能,或者忽略,外围try处理
内层异常捕获失败执行内层finally跳出外层执行异常捕获。
try:
try:
x = 1
y = 0
z= x/y
except NameError:
print ("NameError")
finally:
print ("Finally inside")
except :
print ("All exception outside")
finally:
print ("Finally outside")
3. 自己抛出异常
触发异常时候,我们可以使用raise语句自己触发异常。raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
try:
s = None
if s is None:
print ("s 是空对象")
raise NameError #如果引发NameError异常,后面的代码将不能执行
print(len(s)) #这句不会执行,但是后面的except还是会走到
except TypeError:
print("类型错误空对象没有长度")
except NameError:
print("接收到raise的异常NameError")
finally:
print('end test4')
4.抛出异常时候的参数附加显示
print("test5")
def myerror( level ):
if level < 1:
raise Exception(str(level) + " is Invalid level!")
# 触发异常后,后面的代码就不会再执行
try:
myerror(0) # 触发异常
except Exception as err:
print(Exception)
print(type(err))
print(err)
else:
print("successfully")
finally:
print('end test5')
六、创建自己的异常
通过创建一个新的异常类,程序可以命名它们自己的异常。你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类。举个例子:
#自定义异常
class LengthRequiredException(Exception):
def __init__(self,length,minLength):
Exception.__init__(self)
self.length = length
self.minLength = minLength
#引发自定义的异常
l = [1,2,3,4,5]
minLength = 6
try:
raise LengthRequiredException(len(l),minLength)
except IndexError:
print("index out of bounds")
except LengthRequiredException as e:
print("Length not fit :length is %d required %d" %(e.length,e.minLength))
else:
print("no exception was raised")
finally:
print("finally will be execute")