【问题标题】:"'function' object is not subscriptable"“‘函数’对象不可下标”
【发布时间】:2012-11-22 17:32:21
【问题描述】:

代码:

def user(repo, language, page):
  # import pdb;pdb.set_trace()
  dictionary = {'language_search': language, 'page': page, 'followers': repo['followers'], 'github_repo': repo['name'],'forked?': repo['fork'], 'forks': repo['forks'], 'github_owner': repo['owner'], 'language': repo['language'], 'created_at': repo['created_at'], 'forks': repo['forks'], 'watchers': repo['watchers'], 'username': user['login'], 'type': user['type'], 'public_repos': user['public_repos'], 'followers': user['followers']}
  fields_user = ['blog', 'company', 'location', 'name']
  fields_repo = ['description']
  if user.get('email'):
    dictionary_2 = {'email': user['email']}
    for key in fields_user:
      if user.has_key(key):
        dictionary[key] = user[key]
    for key in fields_repo:
    if repo.has_key(key):
      dictionary[key] = repo[key]
    shelf[dictionary_2['email']] = dictionary
    shelf.sync()
    return dictionary_2['email']
    print dictionary_2['email']

由于某种原因,我不断收到此错误:

<ipython-input-40-98ec5463ecbd> in user(repo, language, page)
  1 def user(repo, language, page): #returns email address to pass into rapportive
  2   # import pdb;pdb.set_trace()
----> 3   dictionary = {'language_search': language, 'page': page, 'followers': repo['followers'], 'github_repo': repo['name'],'forked?': repo['fork'], 'forks': repo['forks'], 'github_owner': repo['owner'], 'language': repo['language'], 'created_at': repo['created_at'], 'forks': repo['forks'], 'followers': user['followers']}
  4   # dictionary = {, , 'watchers': repo['watchers'], 'username': user['login']} , 'type': user['type'], , 'public_repos': user['public_repos']
  5   fields_user = ['blog', 'company', 'location', 'name']

TypeError: 'function' object is not subscriptable

我不明白为什么。我只想写更多的键:值对字典。但是由于某种原因,这一直抛出这个错误。

【问题讨论】:

  • 专业提示:使用key in mapping 而不是mapping.has_key(key)。不要将mapping.get(key) 用于key in mapping 可以做的测试。
  • 反投票,这是一个常见错误,人们应该在搜索时找到它。

标签: python github


【解决方案1】:

user 是一个函数:

def user(repo, language, page):

但在该函数中,您试图将其用作字典:

 user['followers']

在你定义dictionary的那一行:

dictionary = {'language_search': language, 'page': page, 'followers': repo['followers'], 'github_repo': repo['name'],'forked?': repo['fork'], 'forks': repo['forks'], 'github_owner': repo['owner'], 'language': repo['language'], 'created_at': repo['created_at'], 'forks': repo['forks'], 'followers': user['followers']}

您可以将该行拆分为多个,使其更具可读性和可调试性:

dictionary = {
    'language_search': language, 
    'page': page,
    'followers': repo['followers'],
    'github_repo': repo['name'],
    'forked?': repo['fork'],
    'forks': repo['forks'],
    'github_owner': repo['owner'],
    'language': repo['language'],
    'created_at': repo['created_at'],
    'forks': repo['forks'],
    'followers': user['followers']  # `user` is a function, what did you mean instead?
}

您似乎希望在整个函数中都有一个user 字典:

  if user.get('email'):    # Will also throw the error
    dictionary_2 = {'email': user['email']}  # as will this
    for key in fields_user:
      if user.has_key(key):                  # and this
        dictionary[key] = user[key]          # and here

也许您有一个名为user 的全局字典?你不能在你的模块中同时拥有一个字典一个同名的函数。重命名一个或另一个。

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 2023-04-02
    • 1970-01-01
    • 2021-10-22
    • 2017-08-08
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多