<s>[INST] In the code below, the base class `Rectangle` should have a method named `area()` that returns the area of a rectangle, but its implementation cannot be provided as it's unknown at this point. So, an exception should be raised. Not raising an exception would have meant it was left unimplemented intentionally so any attempt to call this method should warn the developer or user about the missing implementation.
#_approach1(with pass)
class Rectangle:
    def area(self):
        pass
#_approach2(with NotImplementedError)
class Rectangle:
    def area(self):
        raise NotImplementedError('Subclass must provide area method')

#_approach3(exception)
class Rectangle:
    def area(self):
        raise Exception('Method area must be implemented by a subclass')
Approach1 does not clearly communicate to the developer that it SEEMS(FOR A DEVELOPER) he could implement it. Approach2 clearly states the relationship. Which one is the best?[/INST]