在python中、如果异常并未被处理或捕捉_python中的异常

一、python中用异常对象(exception object)来表示异常的情况

遇到错误后,回引发异常。如果异常对象并未被处理或者捕捉,则程序就会用所谓的回溯(Traceback ,一种错误信息来终止)

try:

open(“abc。txt”,‘+r’)

except FileNotFoundError:

print(“异常了!”)

try:

open(aa)

except FileNotFoundError:

print(“异常了!”)

try:

open(aa)

except NameError:

print(“异常了!”)

异常的抛出机制:

1.如果在运行时发生异常,则解释器会查找相应的处理语句(成为handlder)

2.如果在当前的函数里没有找到的话,则它会将异常传递给上一层的调用函数,看看那里能不能处理

3.如果在最外层(全局main)还是没有找到的话,那么解释器就会推出,同时打印Traceback,以便让用户找到错误产生的原因

注:

1.虽然大多数错误会导致异常,但异常不一定代表错误,有时候他们呢只是一个警告,有时候时一个终止信号,例如退出循环等

2.在python中所有的异常类都继承Exception,所以可以使用他来接收所有类型的异常信息。

try:

open(aa)

except Exception:

print(“异常了!”)

3.从python2.5后,所有的异常类都有了新的基类BaseException。Exception同样也继承自baseException来接受所有类型的异常。

try:

open(aa)

except BaseException:

print(“异常了!”)

二、定位异常的位置

上面只是打印出异常信息,但是无法准确定位异常信息的位置。

try:

open(“abc.txt”,‘+r’)

except BaseException as msg:

print(msg)

注:在BaseException后面定义msg变量用于接收异常信息,并通过print将其打印出来。在python中用逗号代替as

三、python中常见的异常

异常

描述

BaseException

新的有所异常类的基类

Exception

所有异常类的基类,但继承BaseException类

AssertionError

assert语句失败

FileNotError

试图代开一个不存在的文件或者目录

OsError

当系统函数返回一个系统相关的错误,包括I/O故障,如“找不到文件”或者“磁盘已满”时,引发的异常

NameError

使用一个还未赋值对象的变量

IndexError

当一个序列超出了范围

SyntaxError

当解析器遇到一个语法错误时引发

KeyBoardInterupt

ctrl+c被按下,程序被强行终止

TypeError

传入的对象类型与要求不符

AttributeError

试图访问的对象没有属性

四.更多异常用法

try:

aa = "测试异常:"

print(aa)

except Exception as msg:

print(msg)

else:

print("没有异常!")

这里对aa变量进行了赋值,所以没有异常将会执行else语句后面的内容。通常else语句只有在没有异常的情况下才会被执行。但有些情况下不管是否出现异常,这些操作都希望能被执行,例如文件的关闭,锁的释放,把数据库连接返还给链接池等操作。我们可以通过使用try。。。except。。。finally...语句来实现这样的需求。

try:

#aa = "测试异常:"

print(aa)

except Exception as e:

print(e)

finally:

print("没有异常!")

注:msg和e的功能一样

@@@下面定义aa变量

try:

aa = "测试异常:"

print(aa)

except Exception as msg:

print(msg)

finally:

print("没有异常!")

注:无论是否有异常finally语句都会执行

五:抛出异常

print()方法只能答应错误信息,python中提供了raise方法来抛出一个异常信息,下面演示raise的用法。

from random import randint

number = randint(1,9)

if number % 2==0:

raise   NameError("%d is even"% number)

else:

raise   NameError("%d is odd"% number)

注:通过randint()方法随机生成1到9之间的整数,然后判断这个数字时骑术还是偶数。最后通过raise抛出NameError异常,其实判断奇偶数与NameError之间没有任何关系,这里只是为了掩饰如何通过raise抛出各种类型的异常。

**raise只能使用python中所提共的异常类,如果自定义一个abcError的异常,则python会告诉你ascError没有定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值