Python 断言可以与打印声明进行比较吗?

Python 断言可以与打印声明进行比较吗?,python,assertion,Python,Assertion,断言可以与python中的print语句进行如下比较: def printname(name): print(name) #to not raise an error: assert printname("Hello") == "Hello" #to raise an error: assert printname("Hello") == "notHello" 不,断言不能做到这一点。如果要执行此操作,请尝试以下操作: def printname(名称): 印刷品(名称) 返回名称

断言可以与python中的print语句进行如下比较:

def printname(name):
    print(name)

#to not raise an error:
assert printname("Hello") == "Hello"

#to raise an error:
assert printname("Hello") == "notHello"

不,断言不能做到这一点。如果要执行此操作,请尝试以下操作:

def printname(名称):
印刷品(名称)
返回名称
#要不引发错误,请执行以下操作:
断言printname(“Hello”)=“Hello”
#要引发错误,请执行以下操作:
断言printname(“Hello”)=“notHello”

从技术上讲,这并不能与之相比,但这是一个有效的解决方法。如果您确实想比较它们,请查看
StringIO

尝试使用mock+StringIO来捕获标准输出/err:

from mock import patch
from StringIO import StringIO

def test_foobar():
    out, err = StringIO(), StringIO()
    with patch.multiple(sys, stdout=out, stderr=err):
         do_stuff()
    assert out.getvalue() == 'foo'
    assert err.getvalue() == 'bar'

此外,如果您在测试框架内执行此操作,您可能能够执行多种操作。尤其是pytest:

def test_myoutput(capsys):  # or use "capfd" for fd-level
    print("hello")
    sys.stderr.write("world\n")
    captured = capsys.readouterr()
    assert captured.out == "hello\n"
    assert captured.err == "world\n"
    print("next")
    captured = capsys.readouterr()
    assert captured.out == "next\n"

否。函数printname没有显式的return语句,因此它返回值。因此,断言将None与字符串进行比较,当然会引发断言错误。

尝试时发生了什么?不完全是重复的,但高度相关:。另外,如果您尝试
assert print('hello')==None
,看看会发生什么?您是否尝试测试它是否实际打印了预期的内容?