一.捕获异常try...except...
try:
11/0
except ZeroDivisionError:
print('代码错误')
捕获多个错误要加():
try:
open('123.txt','r')#如果123.txt文件不存在,那么会产生IOError异常
print(num)#如果num变量没有定义,那么会产生NameError异常
except(IOError,NameError):
print(errorMsg)
二.获取异常的信息描述
三.else
try:
print(num)
except NameError as errorMsg:
print('产生错误了:%s'%errorMsg)
else:
print('没有捕获到异常)
四.try...finally...
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等
importtime
try:
f = open('test.txt')
try:
whileTrue:
content = f.readline()
iflen(content) ==0:
break
time.sleep(2)
print(content)
except:
#如果在读取文件的过程中,产生了异常,那么就会捕获到
#比如 按下了ctrl+c
pass
finally:
f.close()
print('关闭文件')
except:
print("没有这个文件")
注意:不管有没有捕捉到错误,finally都会执行
五.异常的传递
deftest1():
print("----test1-1----")
print(num)
print("----test1-2----")
deftest2():
print("----test2-1----")
test1()
print("----test2-2----")
deftest3():
try:
print("----test3-1----")
test1()
print("----test3-2----")
exceptExceptionasresult:
print("捕获到了异常,信息是:%s"%result)
print("----test3-2----")
test3()
print("------华丽的分割线-----")
test2()
六.异自定义异常
'''
自定义异常类:
因为系统提供的异常类,无法描述我的异常。
我需要自定义一些异常类,来描述我所出现的异常。
'''
class NameShortException(Exception):
def __init__(self,msg,num):
self.msg = msg
self.num = num
def f():
'''这是输入姓名并判断,如果姓名的长度小于3,抛出NameShortException异常'''
name = input('请输入姓名:')
if len(name.strip())<3:
#手动抛出一个异常对象,以后的代码不再运行
raise NameShortException('名字的长度至少是3',len(name.strip()))
print('f......')
def main():
try:
f()
except Exception as ex:
print('错误信息是:%s,输入的字符串长度是:%s'%(ex.msg,ex.num))
print('其它代码。。。。。。。')
main()