【问题标题】:Error in Python Method. ListsPython 方法中的错误。列表
【发布时间】:2011-03-30 08:51:33
【问题描述】:

我是 Python 新手。我正在编写一个简单的类,但我遇到了错误。

我的班级:

import config   # Ficheiro de configuracao
import twitter
import random
import sqlite3
import time
import bitly_api #https://github.com/bitly/bitly-api-python

class TwitterC:
    def logToDatabase(self, tweet, timestamp):
        # Will log to the database
        database = sqlite3.connect('database.db') # Create a database file
        cursor   = database.cursor() # Create a cursor
        cursor.execute("CREATE TABLE IF NOT EXISTS twitter(id_tweet INTEGER AUTO_INCREMENT PRIMARY KEY, tweet TEXT, timestamp TEXT);") # Make a table
        # Assign the values for the insert into
        msg_ins       = tweet
        timestamp_ins = timestamp
        values        = [msg_ins, timestamp_ins]
        # Insert data into the table
        cursor.execute("INSERT INTO twitter(tweet, timestamp) VALUES(?, ?)", values)
        database.commit() # Save our changes
        database.close() # Close the connection to the database

    def shortUrl(self, url):
        bit = bitly_api.Connection(config.bitly_username, config.bitly_key) # Instanciar a API
        return bit.shorten(url) # Encurtar o URL

    def updateTwitterStatus(self, update): 
        short = self.shortUrl(update["url"]) # Vou encurtar o URL
        update = update["msg"] + short['url']
        # Will post to twitter and print the posted text
        twitter_api = twitter.Api(consumer_key=config.twitter_consumer_key, 
                          consumer_secret=config.twitter_consumer_secret, 
                          access_token_key=config.twitter_access_token_key, 
                          access_token_secret=config.twitter_consumer_secret)
        status = twitter_api.PostUpdate(update) # Fazer o update
        msg    = status.text # Vou gravar o texto enviado para a variavel 'msg'
        # Vou gravar p a Base de Dados
        self.logToDatabase(msg, time.time())
        print msg

x = TwitterC()
x.updateTwitterStatus([{"url": "http://xxxx.com/?cat=31", "msg": "See some strings..., "}])

错误是:

Traceback (most recent call last):
  File "C:\Documents and Settings\anlopes\workspace\redes_soc\src\twitterC.py", line 42, in <module>
    x.updateTwitterStatus([{"url": "http://xxxx.com/?cat=31", "msg": "See some strings..., "}])
  File "C:\Documents and Settings\anlopes\workspace\redes_soc\src\twitterC.py", line 28, in updateTwitterStatus
    short = self.shortUrl(update["url"]) # Vou encurtar o URL
TypeError: list indices must be integers, not str

有什么解决办法吗?

最好的问候,

【问题讨论】:

  • 请记住,您也可以为好的答案投票(就像我刚刚为史蒂夫所做的那样),如果它被选中,我认为它很好。 :)

标签: python list


【解决方案1】:

看起来您对 updateTwitterStatus 的调用只需去掉方括号:

 x.updateTwitterStatus({"url": "http://xxxx.com/?cat=31", "msg": "See some strings..., "})

您正在传递一个包含单个字典元素的列表。看起来该方法只需要一个带有“url”和“msg”键的字典。

在 Python 中,{...} 创建一个字典,[...] 创建一个列表。

【讨论】:

  • 感谢您的回复。很好的帮助。
【解决方案2】:

错误消息告诉您需要知道的一切。它说“列表索引必须是整数,而不是 str”并指向代码 short = self.shortUrl(update["url"])。所以很明显python解释器认为update是一个列表,而"url"不是列表的有效索引。

由于update 是作为参数传入的,我们必须查看它的来源。它看起来像[{...}],这意味着它是一个包含单个字典的列表。大概你打算只传递字典,所以在调用x.updateTwitterStatus时去掉方括号

调试的第一条规则是假设错误信息是正确的,并且你应该从字面上理解它。

【讨论】:

  • 感谢您的回复。最好的问候,
猜你喜欢
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
相关资源
最近更新 更多