ValueError非常适合您的情况。只需记住这一点,并记住您可以将有用的消息指定为参数,从而将其与其他类型的ValueError区别开来。
但是,除非定义了一个很好的理由只想捕获该特定错误,而又避免捕获任何其他ValueError,否则我不会通过定义子类来使代码更复杂。许多应用程序具有数十种“特殊”错误条件,但是,如果它们还定义了针对每个案例的子类,则代码将很快变得难以维护,并且任何尝试使用该例程的人都会因意外的新异常而不断感到惊讶。

ValueError非常适合您的情况。只需记住这一点,并记住您可以将有用的消息指定为参数,从而将其与其他类型的ValueError区别开来。
但是,除非定义了一个很好的理由只想捕获该特定错误,而又避免捕获任何其他ValueError,否则我不会通过定义子类来使代码更复杂。许多应用程序具有数十种“特殊”错误条件,但是,如果它们还定义了针对每个案例的子类,则代码将很快变得难以维护,并且任何尝试使用该例程的人都会因意外的新异常而不断感到惊讶。