如何测试一个函数只接受某个类型?

2024-04-19 08:31:33 发布

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

我想确保twist_data只获取整数列表作为参数,并添加一个单元测试。你知道吗

 def twist_data(n):
     n=list(n)
     a=[]
     b=[]
     for i in n:
         if i<=0:
             a.append(i)
         if i>0:
             b.append(i)
     n=[len(a),sum(b)]
     return n


 gum=[2,4,5,-6,-7,]
 print (twist_data (gum))

Tags: in列表fordata参数lenifdef
1条回答
网友
1楼 · 发布于 2024-04-19 08:31:33
def all_ints(numbers):
    return all(isinstance(number, int) for number in numbers)


def validate_list(numbers):
    return all((isinstance(numbers, list), all_ints(numbers))


def twist_data(numbers):
    if not validate_list(numbers):
        raise TypeError('"numbers" must be of type "list", where all elements integers')
    positives, negatives = [], []
    for number in numbers:
        if number <= 0:
            negatives.append(number)
        if i > 0:
            positives.append(number)
    return [len(negatives), sum(positives)]

虽然做显式类型检查不是一般的python,但有时这是不可避免的。这是一个非常直接的方法。然而,请求原谅比请求允许更容易,所以这是另一种可能性:

def twist_data(numbers):
    positives, negatives = [], []
    try:
        for number in numbers:
            if number <= 0:
                negatives.append(number)
            if i > 0:
                positives.append(number)
        return [len(negatives), sum(positives)]
    except TypeError:
        raise TypeError('"numbers" must be of type "list", where all elements integers')

这里,如果您尝试在不可比较的类型之间进行比较,则会引发TypeError。然后可以捕获异常并用自己的消息重新发送。你知道吗

还要尽量避免使用单字母变量名。跟踪发生的事情会容易得多。你知道吗

相关问题 更多 >