Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 从函数体内部调用时正确分配的值,在pytest运行时失败_Python_Pytest - Fatal编程技术网

Python 从函数体内部调用时正确分配的值,在pytest运行时失败

Python 从函数体内部调用时正确分配的值,在pytest运行时失败,python,pytest,Python,Pytest,这里有一个简单的代码: 从集合导入订单数据 温度=[10,20,35,50] 手感='冷-暖-热极端'.split() 范围=拉链(温度、手感) def get_feel(温度): od=OrderedDict() 对于范围(0,10)内的i: od[i]=无 对于列表中的(作用域): 对于范围(s[0],121)内的i: od[i]=s[1] 返回od.get(温度) 在return子句之前运行打印输出,如: od.items()中的o的: 打印(o) 结果: (0, None) (1,

这里有一个简单的代码:

从集合导入订单数据
温度=[10,20,35,50]
手感='冷-暖-热极端'.split()
范围=拉链(温度、手感)
def get_feel(温度):
od=OrderedDict()
对于范围(0,10)内的i:
od[i]=无
对于列表中的(作用域):
对于范围(s[0],121)内的i:
od[i]=s[1]
返回od.get(温度)
return
子句之前运行打印输出,如:

od.items()中的o的
:
打印(o)
结果:

(0, None)
(1, None)
(2, None)
(3, None)
(4, None)
(5, None)
(6, None)
(7, None)
(8, None)
(9, None)
(10, 'cold')
(11, 'cold')
(12, 'cold')
[...]
另外,在
return
子句之前调用
od[temperature]
也会给出正确的输出

但是,
pytest
run报告以下错误:

导入pytest
从feel import获得感觉
@pytest.mark.parametize(“输入参数,预期返回”[
(0,无),
(九,无),,
(10"冷"),,
(34,'温暖'),
(35,“热”)
])
def test_get_feel(输入参数,预期返回):
断言获取感觉(输入参数)=预期返回
错误:

input_argument = 10, expected_return = 'cold'
[...]
    def test_get_feel(input_argument, expected_return):
>       assert get_feel(input_argument) == expected_return
E       AssertionError: assert None == 'cold'
[...]

该代码到底有什么问题?

问题在于代码的结构方式。特别是线路

scopes = zip(temperatures, feels)
在全球范围内。第一次调用
get_feel
时,
od
中的所有键都设置正确(尝试将第一次测试更改为
(10,'cold')
或任何其他正确值,您会看到)。但是,在任何后续调用中,
作用域
生成器在第一次函数调用期间已经耗尽。因此,只有键
0-10
才有值。将该行移动到get_feel的第一行,即

def get_feel(temperature):
    scopes = zip(temperatures, feels)
    od = OrderedDict()

工作,但很糟糕。真正的问题是,由于
od
始终包含相同的值,因此应该创建一次并通过新参数传递,或者,为了时间的利益,可以只在全局范围内创建。

问题在于代码的结构方式。特别是线路

scopes = zip(temperatures, feels)
在全球范围内。第一次调用
get_feel
时,
od
中的所有键都设置正确(尝试将第一次测试更改为
(10,'cold')
或任何其他正确值,您会看到)。但是,在任何后续调用中,
作用域
生成器在第一次函数调用期间已经耗尽。因此,只有键
0-10
才有值。将该行移动到get_feel的第一行,即

def get_feel(temperature):
    scopes = zip(temperatures, feels)
    od = OrderedDict()
工作,但很糟糕。真正的问题是,由于
od
始终包含相同的值,因此应该创建一次并通过新参数传递,或者,为了节省时间,可以只在全局范围内创建