异常

作者: Daydreamer_ | 来源:发表于2017-07-12 21:12 被阅读0次

异常就是程序运行错误或者逻辑混乱。需要给客户友好的提示。异常一般是程序中无法完全避免,一般通过一定的手段,尽量减少异常的发生。

当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"

1.捕获异常

1.1 try...except...

try:

    可能出现异常的代码

except:

    对异常信息做出的解释

#记录异常信息

except后不写任何类,表示捕捉任何异常。当出现异常,其实解析器会被这种异常分析,实例化得到一个异常对象 xx。然后再与except里的异常类进行匹配,如果能匹配,as将异常对象赋给ex

·把可能出现问题的代码,放在try中

·把处理异常的代码,放在except中

如:

path = input('输入文件的路径:')print('1......')

content = None

try:

    print('2......')

    content = open(path,'r',encoding='utf-8').read()

    a = 10/0

    print('3......')

except (FileNotFoundError,NameError,ZeroDivisionError) as ex:

    print('4......')

    print('输入的路径不存在')

    print(ex)

print('5......')

print(content)

如果输入错误路径,运行结果如下:

输入文件的路径:sd

1......

2......

4......

输入的路径不存在

[Errno 2] No such file or directory: 'sd'

5......

None

1.2 except捕获多个异常

开发的时候建议,捕捉异常要写的更详细。

但是一般直接用Exception。简单省事。

如果需要写很多异常类的描述,按照从小到大的顺序。

因为有一个捕捉到了异常。不会再被捕捉了。

注意:

·当捕获多个异常时,可以把要捕获的异常的名字,放到except后,并使用元组的方式仅进行存储

try:

num = 10/0

except Exception as ex:

print('2......')

except FileNotFoundError as ex:

print('0......')

except ZeroDivisionError as ex:

print('1......')

运行结果:

2......

try:

num = 10/0

except FileNotFoundError as ex:

print('0......')

except ZeroDivisionError as ex:

print('1......')

except Exception as ex:

print('2......')

运行结果:

1......

1.3 else

我们对else并不陌生,在if中,它的作用是当条件不满足时执行的实行;同样在try...except...中也是如此,即如果没有捕获到异常,那么就执行else中的事情

1.4 try...finally...

try:

pass

finally:

pass

try...finally...语句用来表达这样的情况:

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。比如文件关闭,释放锁,把数据库连接返还给连接池等

2异常的传递

2.1 try嵌套

import time

try:

#f = open('test.txt')

f = open(r'C:\Users\Administrator\Desktop\xx.txt')

try:

while True:

content = f.readline()

if len(content) == 0:

break

num=1/0 #模拟一个异常

#time.sleep(2)

print(content)

#except:

#print('except...')

finally:

f.close()

print('关闭文件')

except:

print('没有这个文件')

运行结果:

没有这个文件

2.2 函数嵌套调用

·如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。

·如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样

def test1():

print("----test1-1----")

try:

print(num)

except:

print('test1  except......')

print("----test1-2----")

def test2():

print("----test2-1----")

test1()

print("----test2-2----")

def test3():

try:

print("----test3-1----")

test1()

print("----test3-2----")

except Exception as result:

print("捕获到了异常,信息是:%s"%result)

print("----test3-2----")

test3()

print("------华丽的分割线-----")

test2()

结果:

----test3-1----

----test1-1----

test1  except......

----test1-2----

----test3-2----

----test3-2----

------华丽的分割线-----

----test2-1----

----test1-1----

test1  except......

----test1-2----

----test2-2----

相关文章

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • python核心编程-错误与异常

    本章主题:什么是异常Python中的异常探测和处理异常上下文管理引发异常断言标准异常创建异常相关模块 什么是异常 ...

  • motan(RPC)系统梳理知识点

    异常分类: 业务异常(bizException) 服务异常(serviceException) 框架异常(fram...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • 从零构架个人博客网站(二)-全局异常处理

    中间件的异常 全局异常中间件全局异常监听定义异常的返回结果定义常见的异常状态开发环境 异常查看 对于异常,我们可以...

  • Node.js异常处理

    Node.js异常分类: 变量异常 函数异常 调用异常 变量异常 未定义变量 未包含对象 变量类型错误 函数异常 ...

  • python 异常

    异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释...

网友评论

      本文标题:异常

      本文链接:https://www.haomeiwen.com/subject/crhihxtx.html