Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python3代码在doctest中不会产生错误,但在不使用doctest的情况下运行时会正常工作_Python 3.x_Doctest - Fatal编程技术网

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()