使用特定参数作为输入的Python函数,异常

2024-09-22 16:31:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有三个参数的函数mean_univ,我希望当满足以下给定条件之一时,它会产生错误

  1. x不是一个列表
  2. x包含除int或float以外的其他值,例如字符串
  3. 如果作为方法输入的字符串不是“mean”或“tmean”
  4. 如果alpha不在0和1之间

例如,当我定义x=[1,2,4,10,12] 我的代码没有引发异常(3),我不知道如何实现2。四,。 谢谢

def mean_univ(x, method, alpha=-1):
  if type(x) == list:
    if method == mean:
      return mean(x)
    elif method ==tmean:
      return tmean(x,alpha)
    else:
      raise Exception("no available method")
  else:
    raise Exception("no list")



def mean(x):
    return print(float(sum(x)) / max(len(x), 1))

def tmean(x, alpha):
  s = sorted(x)
  a = round(alpha * len(x))
  trimmed_list = s[a:-a]
  if len(trimmed_list) == 0:
    return
  trimmed_ave = sum(trimmed_list)/len(trimmed_list)
  return trimmed_ave

Tags: 字符串alphalenreturnifdeffloatmean
2条回答

在您的代码中,我看到了以下问题:

def mean_univ(x, method, alpha=-1):
  if type(x) == list:
    if method == mean:
      return mean(x)
    elif method ==tmean:
      return tmean(x,alpha)
    else:
      return print("no available method")
  else:
    raise Exception("no list")

它被编码为如果x是一个列表,那么查看method以检查它是否在规范范围内。因此,只要为x输入了一个list,它就不会转到代码的raise Exception("no list")部分。您还需要在引号中加上“mean”和“tmean”。我对您的代码做了一些更改,它似乎起到了作用:

我的代码

def mean_univ(x, method, alpha=-1):
    if not isinstance(x, list):
        raise Exception("no list")

    if method == "mean":
        return mean(x)
    elif method == "tmean":
        return tmean(x,alpha)
    else:
        return print("no available method")

所以mean_univ([1,2,4,10,12] , method="mean")给出了5.8

mean_univ(3 , method="mean")抛出一个Exception: no list

mean_univ([1,2,3] , method="other")给出no available method

不知道你说的第四点是什么意思:

if alpha isn't between 0 and 1

因为alpha的默认值是-1。如果要为alpha添加值检查,则可以添加嵌套在mean_univ中的以下行

if not 0 <= alpha <= 1:
        return "Invalid alpha value"

我提出了以下解决方案:

def mean_univ(x, method, alpha=-1):
    if not isinstance(x, list):
        raise ValueError("x is not list")

    if any(not isinstance(item, int) and not isinstance(item, float) for item in x):
        raise ValueError("x does not contains proper values")

    if method != "mean" and method != "tmean":
        raise ValueError("Incorrect method")

    if alpha <= 0 or alpha >= 1:
        raise ValueError("Incorrect alpha")

    if method == "mean":
        return mean(x)
    elif method =="tmean":
      return tmean(x,alpha)
    else:
      return print("no available method")

相关问题 更多 >