纠正Python异常,因为它不包括关键字参数的正确组合

时间:2015-08-05 16:26:19

标签: python python-2.7 exception arguments

如果在函数调用中没有提供关键字参数的正确组合,是否存在引发错误的约定?

举个例子:

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,但这不是我想要的。

1 个答案:

答案 0 :(得分:2)

  

<强> ValueError异常
  当内置操作或函数接收到具有正确类型但值不合适的参数的情况时引发,并且情况不会由更准确的异常(如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

我更喜欢这个的原因是因为只需要维护一个函数,因为转换因子只存在于其中一个函数中。