2011-03-30 6 views
0

저는 파이썬을 처음 사용합니다. 나는 간단한 수업을 쓰고 있지만 오류가 있습니다.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 

모든 단서? 그것은 updateTwitterStatus에 전화처럼 보이는

최고 감사합니다,

+0

좋은 답변을 upvote 할 수 있다는 것을 기억하십시오 (예 : 스티브처럼). 체크 표시가되어 있으면 좋다고 생각합니다. :) –

답변

1

은 대괄호를 잃을 필요 :

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

당신은 하나의 사전 요소 목록을 통과했다. 메소드가 "url"및 "msg"키가있는 사전 만 필요로하는 것처럼 보입니다.

파이썬에서는 {...}이 사전을 만들고 [...]이 목록을 만듭니다.

+0

답장을 보내 주셔서 감사합니다. 큰 도움. –

0

오류 메시지는 알아 두어야 할 모든 것을 알려줍니다. "목록 색인은 str이 아닌 정수 여야합니다."라고 말하면 코드 short = self.shortUrl(update["url"])을 가리 킵니다. 따라서 분명히 파이썬 인터프리터는 update이 목록이고 "url"은 목록에 유효한 색인이 아니라고 생각합니다.

update이 매개 변수로 전달되었으므로 매개 변수의 출처를 확인해야합니다. [{...}]처럼 보이는데 이는 내부에 하나의 사전이있는 목록임을 의미합니다. 아마도 사전 만 전달하려 했으므로 대괄호를 제거하면됩니다. x.updateTwitterStatus

디버깅의 첫 번째 규칙은 오류 메시지가 올 바르고 그대로 받아 들여야한다고 가정하는 것입니다.

+0

답장을 보내 주셔서 감사합니다. 친애하는, –

관련 문제