抛出错误

因为错误也是一个类,捕获一个错误就是捕获到该类的一个实例
因此,错误并不是凭空产生的,而是有意创建并抛出的
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 <module>
        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

时间: 2024-10-29 00:51:06

抛出错误的相关文章

nodejs出现events.js:72中抛出错误

作为初学者,我在使用nodejs的过程中遇到了如下的运行错误: events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._listen2 (net.js:1039:14) at listen (net.js:1061:10) at Server.listen (net.js:1127:5) at Object.<

python模范发送邮件的时候,才smtp.connect的时候总是抛出错误

python发送邮件的时候,总是出现:[Errno 10060] 错误码 根据debug得到在connect的时候出错. 认真检查了下host,没有错呀~应该就是服务器的host. 查看了下网上的一些例子,发现qq的host举例:smtp.qq.com/smtp.163.com/smtp.162.com 于是觉得应该用smtp.+XXX.com来试一下~就可以解决了~ python模范发送邮件的时候,才smtp.connect的时候总是抛出错误,布布扣,bubuko.com

.NET WebAPI 正确抛出错误详细信息

最近把之前的WebAPI项目发布到服务器上,数据库由SQL Server2008 EXPRESS改为SQL Server2000,但在分页查询时服务器抛出了"500错误",但却看不到错误的详细信息,按照之前的经验把配置文件的customErrors打开依然看不到详细信息,由于项目是发布在服务器上,没有办法进行调试,且服务器是windows20003,页没有办法进行远程调试,写try-catch-捕捉action中的错误并抛出依然获取不到详细信息,得不到错误详细信息就没有方向对错误进行修

《从零开始学Swift》学习笔记(Day54)——抛出错误

原创文章,欢迎转载.转载请注明:关东升的博客 能放到try后面调用函数或方法都是有要求的,他们是有可能抛出错误,在这些函数或方法声明的参数后面要加上throws关键字,表示这个函数或方法可以抛出错误. 声明抛出错误方法示例代码如下: //删除Note记录方法 func remove(model: Note) throws { ... } //查询所有记录数据方法 func findAll() throws -> [Note] { ... } 上述代码remove(_:)方法没有返回值,throw

node.js抛出错误问题

很多node.js程序员都习惯使用: throw "error"抛出错误 或者在回调函数中 callback('error') 这些代码咋node.js中都能正常运行,但是从代码规范性来说,这就是相当不规范的代码了. 1.无法同构error.stack获取错误的堆栈信息 2.抛出的并不是一个Error对象 正确的方式是每次抛出错误或者毁掉中返回错误的时候,都使用 new Error('error')来构造一个错误对象,这样在后续的错误中,能轻松的获得错误的堆栈信息,定位错误.

Lua 自己实现排序sort比较方法,抛出错误invalid order function for sorting

明天新功能就要上了,结果刚刚突然QA说项目抛出了错误.握草,吓得立马出了一身汗. 查了一下错误,发现可能是自己写的不稳定排序造成的.自己感觉应该就是.把排序方法写成稳定的之后,代码分离编译进手机,跑了一下木有错误了.脑残的自己为何要对服务器传过来的有序数据进行排序呢?脑抽不明. 下文为转的别人总结的lua库.(该学习的地方还太多) lua的table库 函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table

使用 Throw 抛出错误消息

Throw 命令没有Exception severity 参数,The exception severity is always set to 16. Raises an exception and transfers execution to a CATCH block of a TRY…CATCH construct in SQL Server 2012. THROW [ { error_number | @local_variable }, { message | @local_varia

nodejs显现events.js:72抛出错误

随着人们开始学习,我用nodejs过程中遇到如下列错误执行: events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._listen2 (net.js:1039:14) at listen (net.js:1061:10) at Server.listen (net.js:1127:5) at Object.<a

nodejs出现events.js:72中抛出错误 Error: listen EADDRINUSE

<pre>events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._listen2 (net.js:1039:14) at listen (net.js:1061:10) at Server.listen (net.js:1127:5) at Object.<anonymous> (./server