用户定义的异常 - python

时间:2017-05-26 14:20:57

标签: python-2.7

我正在学习如何在python中创建用户定义的异常

/home/composer/.composer-credentials/member.WebAppAdmin

当我运行上面的程序时,我得到名称错误 NameError:name' sqlite13'未定义

如果连接数据库失败,如何调用用户定义的异常?当[除了My ::]之外的MyError被[except:]替换时,仍然不会调用异常块。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

定义异常不会改变其他模块引发的异常。如果你希望你的代码使用你的异常,你必须抓住其他模块的rasies,然后重新提升你自己的。

import sqlite3 

class MyError(Exception):
     def __init__(self, value):
     self.value = value
try:         
    conn= sqlite3.connect('database56.sqlite')
    print conn 
    print 'connection established'
except sqlite3.Error as e:
    print 'Error message:', e.value
    raise MyError('Could not connect to db: ' + e.value)

我在这里发现了通用的sqlite3错误,但如果它们也被模块引发,则可能需要添加其他异常。究竟是什么异常是不容易在python中弄清楚。您可以在网上阅读来源,试验或浏览示例。

答案 1 :(得分:1)

我认为这是XY Problem

在这种情况下,您希望捕获NameError,因此您应该在except语句中直接使用它。如果要在捕获错误后执行操作,则应将该操作放在except语句中。可以找到一些文档here。 例如:

except NameError as e:
    print 'Error message:', e.value
    print 'Splite module not loaded'

用户定义的错误例如对错误/意外的参数或输出有用。因此,用户定义的错误很有用,因为您可以确定引发它们的情况,这不一定是“python会崩溃”的情况。

Here有关它的一些文档。

也许一个例子可以帮助澄清。

假设有一个函数,其中一个变量是某个东西的价格。 然后你可能会这样做:

class NegativePriceException(Exception):

    def __init__(self):
        print "Price can't be negative!"
        raise AttributeError

def calc_price(...):
    price = ...  #some calculation
    if price < 0:
        raise NegativePriceException
    return price