更正 Python 异常,因为不包括正确的关键字参数组合
Posted
技术标签:
【中文标题】更正 Python 异常,因为不包括正确的关键字参数组合【英文标题】:Correct Python exception for not including correct combination of key-word arguments 【发布时间】:2015-10-28 13:16:33 【问题描述】:如果在函数调用中没有提供正确的关键字参数组合,是否有引发错误的约定?
举个例子:
def convert(miles=0, kilometers=0):
if miles and not kilometers:
return miles * 1.61
elif kilometers and not miles:
return kilometers / 1.61
else:
raise #exception
在这个函数中,一个或另一个参数必须接收一个实参;如果有零个或两个参数,则该函数无效。
built-in exceptions 不包含在这种情况下明显的异常。我考虑过的选项是TypeError
(用于其他错误的函数调用)。这是处理这种情况的标准方法还是我应该使用不同的异常?
顺便说一句,我看到了this question,但这不是我要找的。p>
【问题讨论】:
其他问题和你的有什么不同? 他在谈论价值观。我说的是参数是否存在,零代表没有参数。 @bcdan 您正在寻找参数的值,而不是参数本身。如果问题是缺少位置参数(如果用户忘记指定),该函数将自动引发TypeError
。
您始终可以从Exception
和raise
的一个实例派生出您自己的异常类。
@bcdan:你在谈论价值观。零是一个值。您无法区分用户显式传入零和根本不传入值。
【参考方案1】:
值错误 当内置操作或函数接收到具有正确类型但值不适当的参数时引发,并且该情况没有由更精确的异常(如 IndexError)描述。
https://docs.python.org/2/library/exceptions.html#exceptions.ValueError
还有一件事......
如果函数只有关键字参数,用户可能会将其混淆为无需指定任何内容即可调用的函数。在这里,您无法知道他们想到的是哪种转换。您必须至少有 2 个位置参数来计算值,或者您可以创建两个单独的函数,每个函数都有一个参数。
我会推荐这个:
def miles2km(miles=1):
return miles * 1.60934
def km2miles(km=1):
return 1.0/miles2km(1.0/km) if km else 0
我之所以喜欢这个是因为只需要维护一个函数,因为转换因子只存在于其中一个函数中。
【讨论】:
km2miles
也需要正确处理 0 的参数。
@chepner 我讨厌那个错误!感谢您的关注 - 将进行编辑。以上是关于更正 Python 异常,因为不包括正确的关键字参数组合的主要内容,如果未能解决你的问题,请参考以下文章