Tell us what’s happening:
I have tried numerous different way’s and keep getting same error I am now completely stuck, could some one please point me in right direction
Your code so far
class Movie:
"""Parent class representing a movie."""
def __init__(self, title, year, director, duration):
if not title.strip():
raise ValueError("Title cannot be empty")
if year < 1895:
raise ValueError("Year must be 1895 or later")
if not director.strip():
raise ValueError("Director cannot be empty")
if duration <= 0:
raise ValueError("Duration must be positive")
self.title = title
self.year = year
self.director = director
self.duration = duration
def __str__(self):
return f"{self.title} ({self.year}) - {self.duration} min, {self.director}"
class TVSeries(Movie):
"""Child class representing an entire TV series."""
def __init__(self, title, year, director, duration, seasons, total_episodes):
super().__init__(title, year, director, duration)
if seasons < 1:
raise ValueError("Seasons must be 1 or greater")
if total_episodes < 1:
raise ValueError("Total episodes must be 1 or greater")
self.seasons = seasons
self.total_episodes = total_episodes
def __str__(self):
return f"{self.title} ({self.year}) - {self.seasons} seasons, {self.total_episodes} episodes, {self.duration} min avg, {self.director}"
class MediaError(Exception):
"""Custom exception for media-related errors."""
def __init__(self, message, obj):
super().__init__(message)
self.obj = obj
class MediaCatalogue:
"""A catalogue that can store different types of media items."""
def __init__(self):
self.items = []
def add(self, media_item):
if not isinstance(media_item, Movie):
raise MediaError("Only Movie or TVSeries instances can be added", media_item)
self.items.append(media_item)
def get_movies(self):
return [item for item in self.items if type(item) == Movie]
def get_tv_series(self):
return [item for item in self.items if type(item) == TVSeries]
def __str__(self):
if not self.items:
return "Media Catalogue (empty)"
movies = self.get_movies()
series = self.get_tv_series()
# User Editable Region
result = f"Media Catalogue ({len(self.items)} items):\n\n"
# Display movies section
if movies:
result += "=== MOVIES ===\n"
for i, item in enumerate(movies, 1):
result += f"{i}. {item}\n"
# Also display TV series (maybe this is what's missing)
if series:
for i, item in enumerate(series, len(movies) + 1):
result += f"{i}. {item}\n"
return result
catalogue = MediaCatalogue()
try:
movie1 = Movie('The Matrix', 1999, 'The Wachowskis', 136)
catalogue.add(movie1)
movie2 = Movie('Inception', 2010, 'Christopher Nolan', 148)
catalogue.add(movie2)
series1 = TVSeries('Breaking Bad', 2008, 'Vince Gilligan', 3024, 5, 62)
# User Editable Region
catalogue.add(series1)
series2 = TVSeries('Game of Thrones', 2011, 'David Benioff', 4224, 8, 73)
catalogue.add(series2)
except ValueError as e:
print(f"Validation Error: {e}")
except MediaError as e:
print(f"Media Error: {e}")
print(f'Unable to add {e.obj}: {type(e.obj)}')
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Challenge Information:
Build a Media Catalogue - Step 41