Python的:为什么这个文档测试失败?
题
此代码时自行运行,但在这个文档测试它在10个地方发生故障这是在文档测试工作。我想不通为什么它虽然。以下是整个模块:
class requireparams(object):
"""
>>> @requireparams(['name', 'pass', 'code'])
>>> def complex_function(params):
>>> print(params['name'])
>>> print(params['pass'])
>>> print(params['code'])
>>>
>>> params = {
>>> 'name': 'John Doe',
>>> 'pass': 'OpenSesame',
>>> #'code': '1134',
>>> }
>>>
>>> complex_function(params)
Traceback (most recent call last):
...
ValueError: Missing from "params" argument: code
"""
def __init__(self, required):
self.required = set(required)
def __call__(self, params):
def wrapper(params):
missing = self.required.difference(params)
if missing:
raise ValueError('Missing from "params" argument: %s' % ', '.join(sorted(missing)))
return wrapper
if __name__ == "__main__":
import doctest
doctest.testmod()
解决方案
文档测试要求使用...
为连续行:
>>> @requireparams(['name', 'pass', 'code'])
... def complex_function(params):
... print(params['name'])
... print(params['pass'])
... print(params['code'])
...
>>> params = {
... 'name': 'John Doe',
... 'pass': 'OpenSesame',
... #'code': '1134',
... }
...
>>> complex_function(params)
其他提示
尝试从蟒提示恰好粘贴代码。这意味着它会包含一些...
以及>>>
。否则,文档测试分析器将不知道什么时候有一个多行表达。
在预览:格雷格说什么的
下面是我的模块后,我纠正它(现在的工作):
class requiresparams(object):
"""
Used as a decorator with an iterable passed in, this will look for each item
in the iterable given as a key in the params argument of the function being
decorated. It was built for a series of PayPal methods that require
different params, and AOP was the best way to handle it while staying DRY.
>>> @requiresparams(['name', 'pass', 'code'])
... def complex_function(params):
... print(params['name'])
... print(params['pass'])
... print(params['code'])
>>>
>>> params = {
... 'name': 'John Doe',
... 'pass': 'OpenSesame',
... #'code': '1134',
... }
>>>
>>> complex_function(params)
Traceback (most recent call last):
...
ValueError: Missing from "params" argument: code
"""
def __init__(self, required):
self.required = set(required)
def __call__(self, params):
def wrapper(params):
missing = self.required.difference(params)
if missing:
raise ValueError('Missing from "params" argument: %s' % ', '.join(sorted(missing)))
return wrapper
if __name__ == "__main__":
import doctest
doctest.testmod()
不隶属于 StackOverflow