Więc co próbuję zrobić, to napisać klasę zwaną stronę internetową, konstruktor klasy zaakceptuje słownik reprezentujący to i będzie przechowywać to w zmiennej zwanej linki. Jeśli jednak słownik przekazany jako parametr nie jest ważny przy co najmniej jednym wpisowym, należy podniesiony, zwrócił coś wzdłuż linii "co najmniej jednej strony musi istnieć"

Z kodem napisałem, że nie jestem zbyt pewny, jak blisko jestem niestety.

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
MrWallace 13 sierpień 2014, 11:45

3 odpowiedzi

Najlepsza odpowiedź

Spróbuj if:

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

BTW, nazwij swoje zmienne po jego zawartości, a nie tego typu. Testowanie ważności parametrów powinno być pierwszą rzeczą w metodzie.

Jeśli potrzebujesz słownika, najlepszym sposobem na to, jest przetestowanie domyślnie, czy parametr jest zamiennialny w słowniku, czy nie:

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

Dostajesz typeError, jeśli zadzwonisz do tej funkcji za pomocą 2, ale to całkowicie poprawne, przyczyna jest niewłaściwym typem, a nie nieprawidłową wartością.

Ma to również efekt uboczny, który otrzymasz kopię słownika, więc nie możesz go zmodyfikować przez przypadek w kodzie dzwoniącego później.

3
Daniel 13 sierpień 2014, 08:28

Nie możesz użyć bloku try - except, ponieważ len(self.links)==0 nie podnosi żadnego wyjątku. Zamiast tego możesz użyć instrukcji if,

if not self.links:
    raise ValueError('The website must contain at least one page.')
0
Ashoka Lella 13 sierpień 2014, 07:55

Według tego, co zapytasz później w komentarzach, oto moja odpowiedź:

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).')

Wziąłem wolność umieszczania kapitału W na stronie internetowej, jest to konwencja, którą lubię podążać za zajęciami, również złapałem konkretny wyjątek TypeError, a nie ogólny. Jeśli utworzyłeś stronę internetową (2), podnosi pierwszy typeError w obrębie __init __ (), a następnie wartość ValueError. Reszta jest dość prosta, wystarczy przetestować go z kilkoma słownikami i wartościami i sprawdzić, czy robi to, co chcesz.

0
PhilDenfer 13 sierpień 2014, 08:31