Python了解断言方法

问题描述 投票:-1回答:1

是python中的新功能。我从上个月开始学习它。我找到了名为exercism.io的网站,并开始在那里进行一些练习。我已经停在第二个。您可以在其中找到一些类似于以下内容的“断言类”:

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'

Soemone可以解释我为什么吗?我理解错误,但我不明白为什么。对我来说,我的第二个def函数与第一个函数相同。

python python-3.x assert
1个回答
0
投票

您收到TypeError,因为您没有对函数的参数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,解释器会告诉您缺少一个参数。

© www.soinside.com 2019 - 2024. All rights reserved.