2011-03-30 34 views
0

我是新來的Python。我正在寫一個簡單的課程,但我遇到了一個錯誤。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 

如何解決它任何線索?

最好的問候,

+0

記住你也可以給予好評很好的答案(像我只是做了爲史蒂夫),如果它的勾選,我相信這是很好的。 :) – 2011-03-31 21:01:32

回答

1

它看起來像您的來電updateTwitterStatus只需要輸方括號:

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

你是傳遞一個清單,一個字典元素。它看起來好像該方法只需要一個帶有「url」和「msg」鍵的字典。

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

+0

感謝您的回覆。很好的幫助。 – 2011-03-30 14:01:00

0

錯誤消息告訴你,你需要知道的一切。它說:「列表索引必須是整數,而不是STR」,並指向代碼short = self.shortUrl(update["url"])。所以,很顯然Python解釋器認爲update是一個列表,"url"不是有效的索引列表。

由於update傳遞的,因爲我們要看到它是從哪裏來的參數。它看起來像[{...}],這意味着它是一個包含單個字典的列表。假設你打算只傳遞字典,所以在調用時刪除方括號x.updateTwitterStatus

調試的第一條規則是假定錯誤消息是正確的,並且你應該從字面上理解。

+0

感謝您的回覆。最好的祝福, – 2011-03-30 14:01:25