抱歉,我的问题是对还是错,但我想知道。
class MyCustomException(KeyError):
def __init__(self, *args):
super().__init__(*args)
def method(d):
return d['name']
try:
d = {"value": 1}
method(d)
except MyCustomException:
print('got it')
Aaaand不起作用!我无法捕捉到异常。这种行为是否违反了SOLID原则,Liskov替代原则?
最佳答案
您需要显式抛出您的自定义异常。
class MyCustomException(KeyError):
pass
def method(d):
if not 'name' in d:
raise MyCustomException('name not found!')
else:
return d['name']
try:
d = {"value": 1}
method(d)
except MyCustomException:
print('got it')
Liskov替换本质上是指:如果我有一个类,并且将其子类化,则该子类(如果用作超类)应该能够以与超类完全相同的方式工作。
换句话说,我创建了一个可以接受白面包和小麦面包的类
Baker
。如果我将Baker
子类化为仅接受白面包的类ArtisanBaker
,那么我现在破坏了Liskov替代。我不能再将ArtisanBaker
仅仅用作Baker
。关于python - Python中的SOLID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57298443/