引发错误但类型有效怎么办?

Posted

技术标签:

【中文标题】引发错误但类型有效怎么办?【英文标题】:raise an error but the type is valid what to do? 【发布时间】:2022-01-19 19:34:25 【问题描述】:
if type(satisfaction) != int or type(satisfaction) != float:
    raise TypeError('The type of satisfaction is not ok')

这是班级的__init__

def __init__(self, minibar, floor, number,
             guests, clean_level, rank, satisfaction=1.0):

那些价值观

rooms = [Room(m, 15, 140, [], 1, 1), Room(m, 12, 101, ["Ronen", "Shir"], 6, 2),
         Room(m, 2, 2, ["Liat"], 1, 1), Room(m, 2, 23, [], 1, 1)]

它会引发错误

        raise TypeError('The type of satisfaction is not ok')
TypeError: The type of satisfaction is not ok

有什么问题?

【问题讨论】:

当您使用or 时,该陈述将始终为真...您的意思是and。但请在未来始终提供minimal reproducible example 注意,这可能是你脑中对德摩根定律的误用,这是一个常见的错误。你做了not ( x or y) -> (not x) or (not y),但它应该是not ( x or y) -> (not x) and (not y),当你分配否定(not)它在一个连词(or) and a disjunction (and`)之间翻转,反之亦然跨度> 【参考方案1】:

这是因为or 操作数

如果变量类型是int,那么type(satisfaction) != float是True,False or True == True所以提高 如果变量类型是float,那么type(satisfaction) != int是True,False or True == True所以提高

你需要一个andif type(satisfaction) != int and type(satisfaction) != float:


另外验证类型的方法是使用isinstance,它接受多种类型

if not isinstance(satisfaction, (int, float)):
    raise TypeError('The type of satisfaction is not ok')

【讨论】:

以上是关于引发错误但类型有效怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

浪潮GS7提示类型初始值设定项引发异常,该怎么解决?

类型初始值设定项引发异常

类型初始值设定项引发异常

检查变量的数据类型,否则引发错误[重复]

Emgu.CV.CvInvoke”的类型初始值设定项引发异常。

为啥“引发错误”有效,而“断言”无效?