首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

raise和assert

1:因为异常是class,捕获一个异常就是捕获到该class的一个实例。因此,错误并不是凭空产生的,而是有意创建并抛出的。Python的内置函数会抛出很多类型的错误,我们自己编写的函数也可以抛出错误。如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,语句raise抛出一个错误的实例:

'''

自定义异常类(继承标准异常ValueError),或者直接继承BaseException和Exception,

'''

classUserDefineError(ValueError):

def__init__(self, *args, **kwargs):

print("User define error",len(args),args[])

deffunc(s):

n =int(s)

ifn==:

raiseUserDefineError('invalid value: %s'% s)

#手工触发raise异常

return10/ n

if__name__ =='__main__':

a = func('0')

print(a)

'''

**********输出结果***********:

Traceback(most recent call last):

File "D:\007-Testing Code\Java&Python\Python_Test\test\test_1.py",line 17, in

a=func('0')

File "D:\007-Testing Code\Java&Python\Python_Test\test\test_1.py",line 14, infunc

User define error 1 invalid value: 0

raise UserDefineError('invalid value: %s' % s)

__main__.UserDefineError: invalid value: 0

可以定位到自定义的异常类

'''

阅读开源代码时,经常能看到,单独一个raise的使用,这个是把最近一次产生的异常重新抛出来,交给上层处理。(我已经知道这个异常发生并且捕获到了,但是我不做处理,而由我的上层调用处理。)

'''

例子

'''

if__name__ =="__main__":

try:

try:

raiseIOError

exceptIOError:

print("inner exception")

raise#

exceptIOError:

print("outterexception")

'''

*********输出结果***********:

inner exception

outterexception

首先被内层IOError异常捕获,打印“inner exception”,然后把相同的异常再抛出,被外层的except捕获,打印"outterexception"

'''

2:断言:

断言语句等价于这样的Python表达式,如果断言成功不采取任何措施(类似语句),否则触发AssertionError(断言错误)的异常:

'''

例子

'''

if__name__ =="__main__":

a =2

try:

#当a==1的时候,则不触发异常,当表达式返回false的时候触发异常(AssertionError)。

asserta ==1

print("no error")

exceptAssertionError:

print("Assert error!!")

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G1BAB500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券