时钟类错误处理的最佳方法?

问题描述

我希望代码停止工作并返回输入时间(小时)等无效,因为它不在1到24之间。但是,由于该类的str语句,无效时间仍然会打印出来。无论如何有显示错误而不打印无效时间。 我尝试使用try / except并声明错误

class clock():  
 def __init__(self,hour,minute,second):
   self.hour=hour
   self.minute=minute
   self.second=second
 def __str__(self):
  return str (self.hour)+":" + str(self.minute)+":"+str(self.second)

解决方法

永远不允许存在无效状态。

class Clock():  
   def __init__(self,hour,minute,second):
       if not (0 <= hour < 24 and 0 <= minute < 60 and 0 <= second < 60):
           raise ValueError("Clock values out of bounds")
       self.hour = hour
       self.minute = minute
       self.second = second
,

可接受的答案很好,但可以通过更好的错误消息加以改进:

class Clock:
    def __init__(self,second):
        if hour not in range(24):
            raise ValueError('hour not in range(24)')
        if minute not in range(60):
            raise ValueError('minute not in range(60)')
        if second not in range(60):
            raise ValueError('second not in range(60)')
        self.__hour = hour
        self.__minute = minute
        self.__second = second

    def __str__(self):
        return f'{self.__hour}:{self.__minute}:{self.__second}'

每当Clock类的使用不正确时,ValueError都会准确地指出出了什么问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...