为什么从字典创建集合时会发生错误

时间:2015-12-10 14:14:44

标签: python dictionary set callable

我试过在python控制台中执行以下基本语句,我得到的是一个错误说:

dict object is  not  callable 

我执行的代码:

>>> test_dict = {1:"one",2:"two"}
>>> set3= set(test_dict)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'dict' object is not callable

我在网上遇到了一些问题,但到现在为止找不到任何东西。

3 个答案:

答案 0 :(得分:2)

可以从字典构建一个集合;该集将初始化为字典中的键集。

但是,在您的情况下,名称set已绑定到dict值,因此当您编写set时,您不会获得内置的set类,但是字典。写set = __builtins__.set以在交互式shell中恢复它。在程序中,请在之前的代码中搜索set =(或as set)。

答案 1 :(得分:1)

您正在通过分配屏蔽内置set

>>> set = {}

这使得set名称指向新的字典对象,您不能再将其用作创建新set对象的内置类型:

>>> test_dict = {1:"one", 2:"two"}
>>> set3 = set(test_dict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict' object is not callable

不要屏蔽built-in names ,只需删除您创建的名称绑定,现在一切正常:

>>> del set  # 'undos' the set={} binding 
>>> set3 = set(test_dict)
>>> set3
{1, 2}

答案 2 :(得分:1)

您发布的代码在python3和python2下运行没有问题。如果出现此错误,通常意味着您已将set重新分配给另一个对象。你应该再次检查一下代码。

    Dim startx, starty, startz, endx, endy, endz As Double
    startx = 1.125
    starty = 7.25
    startz = 0.0
    endx = 8.5
    endy = 7.25
    endz = 0.0

    Dim line1(startx, starty, startz, endx, endy, endz) As Object


    If True Then
        line1.Erased = True
    End If

并在python3中:

Python 2.7.9 (default, Apr 13 2015, 11:43:15) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.49)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test_dict = {1:"one",2:"two"}
>>> set3=set(test_dict)
>>> print set3
set([1, 2])
>>> set3.add(3)
>>> print set3
set([1, 2, 3])
>>> set3.pop()
1