当前位置: 首页 > 知识库问答 >
问题:

在Python中检查变量的类型是否为dict[str,Any]

齐俊贤
2023-03-14

我想检查变量的类型是否为:dict[str,Any]。(python语言

我尝试过的(不成功的)是这样的:

myvar = {
 'att1' : 'some value',
 'att2' : 1
}


if not isinstance(myvar, dict[str, Any]):
  raise Exception('Input has the wrong type')

我得到以下错误消息:

TypeError:isinstance()参数2不能是参数化泛型

我该怎么做呢?

谢谢你!

共有3个答案

慕容康安
2023-03-14

不支持您在这里尝试做的事情:

if not isinstance(input, dict[str, Any]):

正如文档中提到的:

内置函数isinstance()issubclass()不接受第二个参数的GenericAlias类型:

>>> isinstance([1, 2], list[str])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: isinstance() argument 2 cannot be a parameterized generic

相反,您只能执行以下操作:

if not isinstance(input, dict):

如果您想检查dict容器的元素类型,您可以做的是迭代其项,然后检查它们的类型(如其他答案中所做的)。

司空海荣
2023-03-14

is实例不像类型提示那样工作。

正确的代码是:

if isinstance(input, dict):

但这并不做我认为你想要的:检查是否所有的键在判决是str和所有的值是任何。基本上,你希望所有的键是str,所以代码来实现这将是这样的:

if all(map(lambda k: isinstance(k, str), input.keys())):

或者类似的。

孙绍辉
2023-03-14

试试下面的方法-确保你有一个dict并且dict的键是字符串。

data1 = {
    'att1': 'some value',
    'att2': 1
}

data2 = {
    'att1': 'some value',
    13: 1
}


def check_if_dict_with_str_keys(data):
    return isinstance(data, dict) and all(isinstance(x, str) for x in data.keys())


print(check_if_dict_with_str_keys(data1))
print(check_if_dict_with_str_keys(data2))

输出

True
False
 类似资料:
  • 问题内容: 假设我有任何变量,定义如下: 我想要一个检查变量类型是否像函数一样的函数。即: 如何检查变量是否为上述定义的类型? 问题答案: 当然,下划线的方式效率更高,但是当效率不是问题时,最好的检查方法是写在@Paul Rosania链接的下划线页面上。 受下划线启发,最终的isFunction函数如下:

  • 问题 你希望检查一个变量是否为一个数组。 myArray = [] console.log typeof myArray // outputs 'object' “typeof” 运算符为数组输出了一个错误的结果。 解决方案 使用下面的代码: typeIsArray = Array.isArray || ( value ) -> return {}.toString.call( value ) i

  • 问题内容: 我该如何做: 健康)状况? (或某些原因,因为我很确定我刚才写的东西是完全错误的) 我正在尝试检查列表中的a是(空白)还是包含。 问题答案: 您可以将您的字符串与空字符串进行比较: 但是您可以将其缩写为: 说明:An通过为您提供的逻辑表达式计算值来实际起作用:或。如果仅使用变量名(或诸如“ hello”之类的文字字符串)而不是逻辑测试,则规则是:空字符串计为False,所有其他字符串计

  • 问题内容: 如何检查变量是否为整数? 问题答案: 如果你需要这样做,请执行 除非你使用的是Python 2.x,否则需要 不要使用type。在Python中,这几乎永远不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你子类化int,则你的新类应注册为int,但type不会这样做: 这符合Python强大的多态性:你应该允许行为类似于的任何对象int,而不是强制将其作为一个对象。 BUT

  • 问题内容: 我想知道如何检查变量是否是类(不是实例!)。 我试图使用该函数来执行此操作,但我不知道类将具有哪种类型。 例如,在以下代码中 我试图用 ??? 代替“ ” ,但我意识到这是python中的关键字。 问题答案: 更好的是:使用该功能。

  • 本文向大家介绍如何检查JavaScript变量是否为函数类型?,包括了如何检查JavaScript变量是否为函数类型?的使用技巧和注意事项,需要的朋友参考一下 使用“ typeof”检查它是否是一个函数。您可以尝试运行以下代码来检查JavaScript变量是否为函数类型: 示例