Python理解断言方法

2024-06-10 23:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手。我从上个月就开始学了。我找到了一个名为exercism.io的网站,并开始在那里做一些练习。我在第二个一站停了下来。您可以找到一些“assert's class”,如下所示:

class TwoFerTest(unittest.TestCase):
    def test_no_name_given(self):
        self.assertEqual(two_fer(), "One for you, one for me.")

    def test_a_name_given(self):
        self.assertEqual(two_fer("Alice"), "One for Alice, one for me.")

    def test_another_name_given(self):
        self.assertEqual(two_fer("Bob"), "One for Bob, one for me.")

主代码应该由我来完成。我应该做的好功能是:

def two_fer(name):
    if name:
        return f'One for {name}, one for me.'
    elif not name:
        return "One for you, one for me."

问题是:为什么我不能这样做:

if not name:
        return "One for you, one for me."
elif name:
    return f'One for {name}, one for me.'

对我来说是一样的,但这种方法让我大吃一惊:

def test_no_name_given(self):
    self.assertEqual(two_fer(), "One for you, one for me.")

 self.assertEqual(two_fer(), "One for you, one for me.")
TypeError: two_fer() missing 1 required positional argument: 'name'

苏蒙能解释一下原因吗?我理解这个错误,但我不明白为什么。对我来说,我的第二个def函数和第一个相同


Tags: nametestselfyouforreturndefone
1条回答
网友
1楼 · 发布于 2024-06-10 23:29:44

您收到一个TypeError,因为您没有将任何默认值应用于函数上的paramater name

def two_fer(name=None):
    if name:
        return f'One for {name}, one for me.'
    elif not name:
        return "One for you, one for me."

断言向您显示:

self.assertEqual(two_fer(), "One for you, one for me.")

没有提供给two_fer()的参数,因为副命题为空

但是您定义了two_fer需要有一个参数:

def two_fer(name):
    ...

由于没有为name提供任何默认值,解释器会告诉您,如果调用了assert,则缺少一个参数

相关问题 更多 >