编写一个用至少一个条目读取字典的类

时间:2014-08-13 07:45:51

标签: python class

所以我要做的是编写一个名为Website的类,该类的构造函数将接受表示此的字典并将其存储在名为links的变量中。但是,如果作为参数传递的字典对于至少一个条目是无效的,那么应该引发一个ValueError,返回的内容是'至少有一个页面必须存在'

根据我写的代码,我不太确定我有多接近。

class website:
    def __init__(self,dictionary):
        self.links = dictionary
        try:
            len(self.links)==0
        except:
            raise ValueError('The website must contain at least one page.')

3 个答案:

答案 0 :(得分:3)

尝试if

class Website:
    def __init__(self, links):
        if not links:
            raise ValueError('The website must contain at least one page.')
        self.links = links

顺便说一句,在变量的内容之后命名变量而不是它的类型。测试参数的有效性应该是方法中的第一件事。

如果您需要字典,那么最好的方法是隐式测试参数是否可以转换为字典:

class Website:
    def __init__(self, links):
        links = dict(links)
        if not links:
            raise ValueError('The website must contain at least one page.')
        self.links = links

如果使用2调用此函数,则会出现TypeError,但这完全正确,原因是错误的类型而不是无效的值。

这也有副作用,即您获得了字典的副本,因此您无法在调用者的代码中意外修改它。

答案 1 :(得分:0)

您无法使用try - except块,因为len(self.links)==0不会引发任何异常。您可以改为使用if语句,

if not self.links:
    raise ValueError('The website must contain at least one page.')

答案 2 :(得分:0)

根据你在评论中提到的内容,这是我的回答:

class Website:
    def __init__(self, dictionary):
        self.links = dictionary
        try:
            if len(self.links) > 0:
                print "Valid entry"
            else:
                raise ValueError('The website must contain at least one page.')
        except TypeError:
            raise ValueError('The link is invalid (Bad dictionnary).')

我冒昧地在网站上放置了一个大写字母W,这是我喜欢关注类的约定,我也捕获了一个特定的TypeError异常,而不是一个普通的异常。 如果您创建了一个Website(2),它首先在__init __()中引发一个TypeError,然后引发一个ValueError。其余的非常简单,只需要用几个字典和值来测试它,看看它是否符合你的要求。