【问题标题】:Exception handling in __init__ method__init__ 方法中的异常处理
【发布时间】:2018-08-19 09:32:18
【问题描述】:

我是一个初学者,只是在解决一个问题。如果使用字符串参数传递对象,我必须引发异常,但该程序的输出为空白。有人可以帮忙吗?

class RadiusInputError(Exception):
    pass

class Circle:
    def __init__(self,radius):
        self.radius=radius
        if type(self.radius) == "<class 'str'>":
            raise RadiusInputError

try:
    a = Circle('Hello')
except RadiusInputError:
    print("'Hello' is not a number.")

【问题讨论】:

    标签: python python-3.x class exception-handling


    【解决方案1】:

    检查您创建的对象的数据类型,而是尝试以以下格式编写:

    class RadiusInputError(Exception):
        pass
    
    class Circle:
        def __init__(self,radius):
            self.radius=radius
            try:
                if not isinstance(self.radius, int):
                        raise RadiusInputError
            except RadiusInputError:
                print("'hello' is not a number.")
    
    a = Circle('hello')
    

    【讨论】:

      【解决方案2】:
      class CustomError(Exception):
          pass
      
      class Circle:
          def __init__(self,radius):
              self.radius=radius
              result = isinstance(self.radius, str)
              if result == True:
                  raise CustomError
      
      try:
          a = Circle('Hello')
      except CustomError:
          print("'Hello' is not a number.")
      

      【讨论】:

        【解决方案3】:

        你真的不应该以这种方式检查类型

        您的代码不起作用的原因是:

        >>> type(type(str))
        <class 'type'>
        >>> type(str)
        <class 'type'>
        

        如您所见,type(str) 的打印表示看起来像一个可以比较的字符串,但表达式 type(self.radius) == "&lt;class 'str'&gt;": 将左侧的 type 与右侧的 str 进行比较永远不会评估为真。检查某事物是否为特定类型的方法是使用isinstance,如下所示:

        class RadiusInputError(Exception):
            pass
        
        class Circle:
            def __init__(self,radius):
                self.radius = radius
                if isinstance(self.radius, str):
                    raise RadiusInputError
        
        try:
            a = Circle('Hello')
        except RadiusInputError:
            print("'Hello' is not a number.")
        

        这按预期工作,您的其余代码都很好,只需更改类型检查即可。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-02
          • 1970-01-01
          • 2015-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-06
          • 1970-01-01
          相关资源
          最近更新 更多