Python中的AssertionError和TypeError

时间:2014-01-18 18:15:21

标签: python

我有一些问题,即使经过几天的努力,我也无法克服。

Toy没有实例变量和一个方法play,它返回字符串"Squeak!\n"(带有感叹号和大写'S',没有空格,并带有换行符结束)。 Toy的构造函数(它的__init__方法)不带任何参数(除了通常的self)并且什么都不做(所以它可能被省略)。

Dog有一个实例变量,它的名称,必须作为构造函数的参数提供。它有两种方法:

如果call(self, shout)正好是True(带逗号,空格和感叹号,没有前导或尾随空格),则

shout会返回"Here, n!",其中n 1}}是狗的名字。否则,它返回False play(self, toy, n)生成字符串"Yip! "(带有尾随空格)与toy.play()返回的字符串连接在一起。它重复该组合重复n次,除非n为负,它与0相同。澄清:“s”重复2次是“ss”。 “s”重复0次是“”。

这就是我所拥有的:

class Toy:

    def __init__(self):
        pass

    def play(self):
        return "Squeak!\n"

class Dog:

    def __init__(self, name):
        self.name = name

    def call(self, shout):
        self.shout = shout
        if self.shout == 'Here, ' + self.name + '!':
            return True
        return False

    def play(self, toy, n):
        self.toy = toy
        self.n = n
        if n <= 0:
            print('')
        else:
            for i in range(n):
                print('Yip ' + self.toy.play())

但是,我得到的错误很少:

TestDog2.test_dog_fancy_toy

FAILURE: AssertionError
None != 'Yip! Ding, Dong!\n'

-

TestDog2.test_dog_play_once

FAILURE: AssertionError
None != 'Yip! Squeak!\n'

-

TestDog2.test_dog_play_zero_twice

ERROR: TypeError
Can't convert 'NoneType' object to str implicitly

2 个答案:

答案 0 :(得分:1)

Toy类中,play方法返回一个字符串,而play Dog方法返回任何内容(它只是打印内容)。

当您致电dog.call()时,您不会获得'Yip ' + self.toy.play()值。所以函数按预期返回None,你的断言是错误的 要解决这个问题,您应该返回值而不是打印它。

例如,在您的Dog.call()方法中:

if n <= 0:
    return ''
else:
    phrases = ['Yip ' + self.toy.play() for i in range(n)]
    return '\n'.join (phrases)

phrases是一个构建using list comprehension的列表。它将包含n个元素,由表达式'Yip ' + self.toy.play()组成。您只需要使用\n加入每个元素,在每个短语后创建一个新行,然后就完成了。

答案 1 :(得分:0)

#!/usr/bin/env python

class Toy:
    def play(self):
        return "Squeak!\n"

class Dog:
    def __init__(self, name):
        self.name = name

    def call(self, shout):
        if shout == 'Here, ' + self.name + '!':
            return True
        return False

    def play(self, toy, n):
        if n <= 0:
            print('')
        else:
            for i in range(n):
                print('Yip ' + toy.play())

dog = Dog("Spot") # Spot the dog
toy = Toy()

assert(toy.play() == "Squeak!\n")
assert(dog.call("Here, {0}!".format('Spot'), 'Here, Spot!')

不确定您的问题究竟是什么,但这可能会有所帮助?

我们真的需要更多信息才能在这里为您提供帮助。