键入错误,显示在控制台上,但不在pythontutor.com上

时间:2018-01-06 07:42:13

标签: python list

好的,所以我有一块我正在尝试调试的代码,我通常使用Pythontutor.com来逐步查看它出错的地方。问题是,确切的代码可以在网站上使用,但不能在我的控制台中使用。

row = []
row.append("Acid Arrow")
testList = ['Detect', 'Discern', 'Summon', 'Call', 'Binding']
nameList = row[0].split(' ')
print testList, nameList
a = list(set(testList) & set(nameList))

我得到的错误是:

C:\Users\User\Dropbox\D&D\SpellBag>livingSpell.py
['Detect', 'Discern', 'Summon', 'Call', 'Binding'] ['Acid', 'Arrow']
Traceback (most recent call last):
  File "C:\Users\User\Dropbox\D&D\SpellBag\livingSpell.py", line 121, in <module>
    sb = spellBook(r'allSpells.csv')
  File "C:\Users\User\Dropbox\D&D\SpellBag\livingSpell.py", line 27, in __init__
    a = list(set(testList) & set(nameList))
TypeError: 'str' object is not callable

上面的代码在PythonTutor上完美运行,但是当我在控制台中运行它时失败了。它打算做的是检查列表中的单词是否在拼写名称中,如果其中任何一个单词是,则该拼写将被传递并继续前进。它应该返回一个空列表,但我得到错误。

1 个答案:

答案 0 :(得分:2)

出错的行是a = list(set(testList) & set(nameList)),错误说“'str'对象不可调用。”这意味着Python解释器试图调用一个函数,发现它实际上并不是一个函数。如果您键入"bad_code"(),则会出现相同的错误,因为字符串"bad_code"不是函数。

不可能准确地说出两者中哪一个有问题,但listset已被覆盖,现在是一个字符串而不是Python中提供的默认函数。这段代码在pythontutor.com中可以正常工作,因为有问题的代码行发生在你的文件之前的某个地方(错误说你预先有22行代码)。事实上,如果您启动了一个空白文件并且只在StackOverflow上发布了此片段,那么它将完美运行。检查原始源代码中的list = ...set = ...等内容。

在Python中,通过在名称后附加下划线来避免命名与保留字(list,set,或if,with,while等等)的冲突是一种常见的约定。在这种情况下,这意味着要写list_ = ...set_ = ...。一般来说,一个好的编码实践是为你的变量提出一个特定的名称来描述它。例如,您可以使用used_spell_list代替list(只是猜测......我不知道这是如何被覆盖的。)