抱歉,我的问题是对还是错,但我想知道。

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/

10-11 04:11