更正 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 您始终可以从Exceptionraise 的一个实例派生出您自己的异常类。 @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 异常,因为不包括正确的关键字参数组合的主要内容,如果未能解决你的问题,请参考以下文章

python之函数基础

使用 xCode4 将应用程序提交到应用程序商店 - 关键步骤摘要 - 请更正/添加

Python 异常处理

Python 基础第十天

python 如何跳过异常继续执行

如何更正文件的字符编码?