异常处理

一.捕获异常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)

二.获取异常的信息描述


异常处理_第1张图片


异常处理_第2张图片

三.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()

你可能感兴趣的:(异常处理)