Python中的自定义异常

时间:2015-04-30 12:47:08

标签: python python-3.x custom-error-handling

我正在尝试在Python中创建自定义错误异常。如果参数不在字典_fetch_currencies()中,我希望引发错误。

自定义错误:

class CurrencyDoesntExistError:
    def __getcurr__(self):
        try:
            return _fetch_currencies()[self]
        except KeyError:
            raise CurrencyDoesntExistError()

我如何将它写入我的函数:

def convert(amount, from_curr, to_curr, date=str(datetime.date.today())):
    """
    Returns the value obtained by converting the amount 'amount' of the 
    currency 'from_curr' to the currency 'to_curr' on date 'date'. If date is 
    not given, it defaults the current date.
    """
    try:    
        from_value = float(get_exrates(date)[from_curr])
        to_value = float(get_exrates(date)[to_curr])

        C = amount * (to_value / from_value)
        return C
    except CurrencyDoesntExistError:
        print('Currency does not exist')

我目前收到错误消息:

TypeError: catching classes that do not inherit from BaseException is not allowed

如果我在我的函数except KeyError:中使用convert它会运行,但是提出此自定义错误异常的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

如果您想要的只是在引发异常时要打印的消息,请执行以下操作:

class CurrencyDoesntExistError(Exception):
    pass

raise CurrencyDoesntExistError("Currency does not exist")

答案 1 :(得分:0)

您应该将班级定义更改为:

class CurrencyDoesntExistError(BaseException):
    ...

文档:https://docs.python.org/3.1/tutorial/classes.html#inheritance

答案 2 :(得分:0)

正如其他人已经说过的那样,您的类定义缺少基类引用是有问题的。

正如我所指出的,如果您有一个模块和一个具有相同名称的类,并且您导入该模块而不是该类,也会发生这种情况。

例如,模块和类称为MyException。

import MyException

在以下情况下会出现此错误:

from MyException import MyException

按预期工作。