我正在尝试在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
它会运行,但是提出此自定义错误异常的正确方法是什么?
答案 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
按预期工作。