博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抛出错误
阅读量:5138 次
发布时间:2019-06-13

本文共 1393 字,大约阅读时间需要 4 分钟。

因为错误也是一个类,捕获一个错误就是捕获到该类的一个实例

因此,错误并不是凭空产生的,而是有意创建并抛出的
Python的内置函数会抛出很多类型的错误,自定义函数也可抛出错误

  

  自定义错误

  如果要抛出错误,首先根据需要,可以定义一个错误类,选择好继承关系,然后,用raise语句抛出一个错误的实例
  必要时可自定义错误类型,但尽量使用Python内置的错误类型

class FooError(ValueError): #继承Python内置错误类型ValueError        pass    def foo(s):        n = int(s)        if n==0:            raise FooError('invalid value: %s' % s)        return 10 / n    foo('0')        #输出:    Traceback (most recent call last):    File "err_throw.py", line 11, in 
foo('0') File "err_throw.py", line 8, in foo raise FooError('invalid value: %s' % s) __main__.FooError: invalid value: 0

 

  连续抛错误

  捕获错误目的只是记录一下,便于后续追踪,当前函数不知道应该怎么处理该错误时,就要继续往上抛,让顶层调用者去处理该错误
  若顶层调用者还无法知道如何处理时,就继续向上抛,直到错误得到正确解决,否则程序会中止

def foo(s):        n = int(s)        if n==0:            raise ValueError('invalid value: %s' % s)        return 10 / n    def bar():        try:            foo('0')        except ValueError as e:            print('ValueError!')            raise    #在bar()函数中已经捕获了错误,但打印一个ValueError!后,又把错误通过raise语句抛出去了    bar()

 

  关于raise

  raise语句如果不带参数,就会把当前错误原样抛出

try:        10 / 0    except ZeroDivisionError:        raise

  

  在except中raise一个Error,还可以把一种类型的错误转化成另一种类型

  只要是合理的转换逻辑就可以,但是,决不应该把一个IOError转换成毫不相干的ValueError

try:        10 / 0    except ZeroDivisionError:        raise ValueError('input error!')

转载于:https://www.cnblogs.com/shiliye/p/11017492.html

你可能感兴趣的文章
2017年7月19日面试后记
查看>>
MVC5 学习笔记2
查看>>
OC Copy和内存管理
查看>>
用tpcc测试对比 innodb 和 tokudb
查看>>
自定义SWT控件七之自定义Shell(可伸缩窗口)
查看>>
qTip2 Content
查看>>
struts2中减少action数量(通配符使用)
查看>>
Hibernate对多表关联查询
查看>>
我该怎么办?
查看>>
bzoj 1176 [Balkan2007]Mokia 【CDQ分治】
查看>>
Smobiler Service是什么?(Smobiler——.NET移动开发平台)
查看>>
关于波特率的设置中M的单位问题
查看>>
HDU 1024:Max Sum Plus Plus(DP)
查看>>
Java集合框架详解(全)
查看>>
35 数组中的逆序对
查看>>
大端序与小端序
查看>>
26. Remove Duplicates from Sorted Array
查看>>
Windows 8 开发31日-第10日-Toast通知
查看>>
查找树ADT——二叉搜索树
查看>>
spark集群的构建,python环境
查看>>