【问题标题】:Instead of isinstance, use of try and except in Python 3.7在 Python 3.7 中使用 try 和 except 代替 isinstance
【发布时间】:2019-02-17 03:17:23
【问题描述】:

我使用 try 和 except 编写了一个代码来捕获我的错误消息(我想在不使用 isinstance 的情况下编写它)并且当输入不是整数时我收到错误消息。问题是,即使输入是有效的整数,程序也会给我错误消息。请给我一些建议以使其运行。我的代码如下:

我尝试使用异常子句,但没有奏效。

class Hotel:
    def __init__(self,room,catagory):
        if room != int:
            raise TypeError ()
        self.room = room
        self.catagory = catagory
        self.catagories = {"A":"Elite","B":"Economy","C":"Regular"}
        self.rooms = ["0","1","2","3","4","5"]

    def getRoom(self):
        return self.room

    def getCatagory(self):
        return self.catagory
        return self.catagories.get(self.catagory)
    def __str__(self):
        return "%s and %s"%(self.rooms[self.room],self.catagories.get(self.catagory))
try:
    room1 = Hotel(a,"A")
    room2 = Hotel(1,"A")
    print(room1.getRoom())
except:
    print("there's an error")

我期待:

有错误

1 和精英

一个

【问题讨论】:

  • 因为,if room != int: 始终是 True。这不是您在 Python 中检查类型的方式。
  • isinstance(room, int) 确实是更好的模式(如果你要使用类型检查的话),但type(room) == int 可能是你要找的。
  • 如果你捕捉到所有这样的错误,你也会捕捉到调试代码的所有可能性。

标签: python try-catch except


【解决方案1】:

您正在检查 room != int 是否。它总是会给你错误。

您必须检查 type(room)!= int 。 我已经更正了下面的代码

class Hotel:
    def __init__(self,room,catagory):
        if type(room) != int:
            raise TypeError ()
        self.room = room
        self.catagory = catagory
        self.catagories = {"A":"Elite","B":"Economy","C":"Regular"}
        self.rooms = ["0","1","2","3","4","5"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多