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.')
3 odpowiedzi
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.
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.')
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.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.