所以我要做的是编写一个名为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.')
答案 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。其余的非常简单,只需要用几个字典和值来测试它,看看它是否符合你的要求。