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类
AssertionErrorassert语句失败
FileNotError试图代开一个不存在的文件或者目录
OsError当系统函数返回一个系统相关的错误,包括I/O故障,如“找不到文件”或者“磁盘已满”时,引发的异常
NameError使用一个还未赋值对象的变量
IndexError当一个序列超出了范围
SyntaxError当解析器遇到一个语法错误时引发
KeyBoardInteruptctrl+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没有定义

 

转载于:https://www.cnblogs.com/fengyiru6369/p/7011489.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值