0

我在这里搜索了单元测试中的大量 NameError 问题,但似乎找不到与我的问题相关的任何内容。

这是一个家庭作业,所以如果你能告诉我哪里错了,而不是如何纠正它,那就太好了。我正在尝试为一个函数编写一个单元测试,该函数将列表中的最后一个数字与列表中的第一个数字交换。

这是我为该函数编写的代码:

def swap_k(L, k):

    """ (list, int) -> NoneType

    Precondtion: 0 <= k <= len(L) // 2

    Swap the first k items of L with the last k items of L.

    >>> nums = [1, 2, 3, 4, 5, 6]
    >>> swap_k(nums, 2)
    >>> nums
    [5, 6, 3, 4, 1, 2]
    >>> nums = [1, 2, 3, 4, 5, 6]
    >>> swap_k(nums, 3)
    >>> nums
    [4, 5, 6, 1, 2, 3]
    """

    L[:k], L[-k:] = L[-k:], L[:k]

这段代码使用 doctest 可以正常工作,完全没有错误,所以我很确定它没有任何问题。但是,我为单元测试编写的代码不断给我一个 NameError。这是单元测试的代码:

import a1
import unittest

class TestSwapK(unittest.TestCase):
    """ Test class for function a1.swap_k. """

    def test_swapk_1(self):
        """Swap the first k items of L with the last k items of L. Where L =
        [1, 2, 3, 4, 5, 6] and k = 2."""

        L = [1, 2, 3, 4, 5, 6]
        expected = [5, 6, 3, 4, 1, 2]
        a1.swap_k(L, k)
        self.assertEqual(L, expected)


if __name__ == '__main__':

    unittest.main(exit=False)

这是错误消息:

E
======================================================================
ERROR: test_swapk_1 (__main__.TestSwapK)
Swap the first k items of L with the last k items of L. Where L =
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\xxxxx\xxxxxxxxxx\xxxxxxxxxxxx\test_swap_k.py", line 13, in test_swapk_1
    a1.swap_k(L, k)
NameError: global name 'k' is not defined

----------------------------------------------------------------------
Ran 1 test in 0.016s

FAILED (errors=1)`

有人可以告诉我哪里出错了,这让我发疯。如果有可能在不告诉我答案的情况下告诉我哪里出错了,请这样做。

4

2 回答 2

1

错误很明显:k未定义。在您的 doctest 示例中,k3

a1.swap_k(L, k=3)

我只是k=3用来冗长。a1.swap_k(L, 3)如果你愿意,你可以使用。

于 2013-04-09T15:14:27.160 回答
0

您尚未在函数中定义变量 k 。

代替:

a1.swap_k(L, k)

您可能打算输入:

a1.swap_k(L, 2)

或者

k = 2
a1.swap_k(L, k)

或类似的东西。

于 2013-04-09T15:15:59.437 回答