Python 如何在此实例中使用Assert?

Python 如何在此实例中使用Assert?,python,function,assert,Python,Function,Assert,我试图使用assert检查另一个函数是否正常工作 在这种情况下,我尝试测试的功能如下: def factorial(n): if type(n) != int or n < 0: raise ValueError, "\nThis error has been raised because the value inputted was either not an integer or negative." else: result =

我试图使用assert检查另一个函数是否正常工作

在这种情况下,我尝试测试的功能如下:

def factorial(n):
    if type(n) != int or n < 0:
        raise ValueError, "\nThis error has been raised because the value inputted was either not an integer or negative."
    else:   
        result = 1
        for x in range(n):
            result = result*(x+1)
        print "\n", n, "factorial is:", result

n = input("\n\n Insert a non-negative integer to take the factorial of: ")

factorial(n)
然而,这返回了一个断言错误,尽管我已经用n=1手动检查了函数,它确实返回了1,所以它不应该因为条件为true而引发断言错误吗

有人能指出我为什么会出现断言错误吗


也可以使用assert检查raise ValueError段是否正确吗?

您的函数似乎只需要打印结果,因此实际函数返回的是None,因此assert factorial1==1实际上被计算为assert None==1,这是失败的。从函数中返回一个值,断言将不再失败。

您的函数似乎只需打印结果,因此实际函数返回的是None,因此assert factorial1==1实际上被计算为assert None==1,这将失败。从函数返回一个值,断言将不再失败。

这里的问题是,您没有为断言函数返回一个值来检查阶乘函数返回的内容

这就是我所做的:为了测试,我只是添加了一个return语句来返回结果

>>> assert factorial(2)==1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert factorial(2)==2
>>> assert factorial(1)==1

def factorial(n):
    if type(n) != int or n < 0:
        raise ValueError, "\nThis error has been raised because the value inputted was either not an integer or negative."
    else:   
        result = 1
        for x in range(n):
            result = result*(x+1)
        return result

n = input("\n\n Insert a non-negative integer to take the factorial of: ")

这里的问题是,您没有为assert函数返回一个值来检查阶乘函数返回的内容

这就是我所做的:为了测试,我只是添加了一个return语句来返回结果

>>> assert factorial(2)==1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert factorial(2)==2
>>> assert factorial(1)==1

def factorial(n):
    if type(n) != int or n < 0:
        raise ValueError, "\nThis error has been raised because the value inputted was either not an integer or negative."
    else:   
        result = 1
        for x in range(n):
            result = result*(x+1)
        return result

n = input("\n\n Insert a non-negative integer to take the factorial of: ")
阶乘函数打印结果,但不返回结果。这就是断言失败的原因。试试这个:

def factorial(n):
    if not isinstance(n, int):
        raise ValueError('value must be an int')
    if n < 0:
        raise ValueError('n must be >= 0')

    result = 1
    for x in range(n):
        result = result * (x + 1)

    return result  # <-- This is the magic line :)
阶乘函数打印结果,但不返回结果。这就是断言失败的原因。试试这个:

def factorial(n):
    if not isinstance(n, int):
        raise ValueError('value must be an int')
    if n < 0:
        raise ValueError('n must be >= 0')

    result = 1
    for x in range(n):
        result = result * (x + 1)

    return result  # <-- This is the magic line :)

次要的旁白:异常消息是程序员看到的,而不是最终用户看到的。通常,它们不包含很多格式或构造,例如,出现这个错误是因为:异常消息是程序员看到的,而不是最终用户看到的。通常,它们不包含很多格式或构造,因为没有简单的基本方法来测试factorial-1,所以出现了这个错误?顺便说一下,谢谢你的帮助博士测试是最基本的方法。三行代码是最基本的:所以没有一个简单的测试factorial-1的基本方法?顺便说一下,谢谢你的帮助博士测试是最基本的方法。三行代码是最基本的: