Python 3.x python3代码在doctest中不会产生错误,但在不使用doctest的情况下运行时会正常工作
当我运行它时,我希望它能通过所有测试,但会产生以下输出: 不会产生错误,并打印以下输出:Python 3.x python3代码在doctest中不会产生错误,但在不使用doctest的情况下运行时会正常工作,python-3.x,doctest,Python 3.x,Doctest,当我运行它时,我希望它能通过所有测试,但会产生以下输出: 不会产生错误,并打印以下输出: def process(line): list_lines = line.split('\t') return (list_lines[2], int(list_lines[7])) ip_tuple = process("2\t1.001451000\t192.168.0.24\t\t10.0.0.5\t\t98\t84\t\t\t\t\t\t\t\t1") print(ip_tuple
def process(line):
list_lines = line.split('\t')
return (list_lines[2], int(list_lines[7]))
ip_tuple = process("2\t1.001451000\t192.168.0.24\t\t10.0.0.5\t\t98\t84\t\t\t\t\t\t\t\t1")
print(ip_tuple)
请解释为什么会这样
docstring
与原始字符串一起提供,因此所有的\t
都被视为转义的\\t
,因此事实上,拆分('\t')
并没有像您预期的那样工作
这也可以通过在docstring中添加调试打印来确认:
('192.168.0.24', 84)
输出
"""
>>> test_string = "2\t1.001451000\t192.168.0.24\t\t10.0.0.5\t\t98\t84\t\t\t\t\t\t\t\t1"
>>> print(test_string.split('\t'))
"""
在docstring中转义\t
:
['2', ' 1.001451000 192.168.0.24', ' 10.0.0.5', '', ' 98 84', '', '', '', '', '', '', '', ' 1']
没有错误地通过
编辑
使整个docstring成为原始字符串也可以解决这个问题
import doctest
def process(line):
"""
>>> ip_tuple = process("2\\t1.001451000\\t192.168.0.24\\t\\t10.0.0.5\\t\\t98\\t84\\t\\t\\t\\t\\t\\t\\t\\t1")
"""
list_lines = line.split('\t')
return (list_lines[2], int(list_lines[7]))
doctest.testmod()
没有错误地通过
['2', ' 1.001451000 192.168.0.24', ' 10.0.0.5', '', ' 98 84', '', '', '', '', '', '', '', ' 1']
import doctest
def process(line):
"""
>>> ip_tuple = process("2\\t1.001451000\\t192.168.0.24\\t\\t10.0.0.5\\t\\t98\\t84\\t\\t\\t\\t\\t\\t\\t\\t1")
"""
list_lines = line.split('\t')
return (list_lines[2], int(list_lines[7]))
doctest.testmod()
import doctest
def process(line):
# V note the r for raw string
r"""
>>> ip_tuple = process("2\t1.001451000\t192.168.0.24\t\t10.0.0.5\t\t98\t84\t\t\t\t\t\t\t\t1")
"""
list_lines = line.split('\t')
return (list_lines[2], int(list_lines[7]))
doctest.testmod()