2016-04-09 12 views
0

Ich erstellte Twitter-Anwendung auf Google App-Engine Mit diesem Repository https://github.com/cybermithun/twitter-search-reply-bot während ich diese App laufen bekomme ich diesen Fehler. kann mir jemand sagen, was ist falsch mit dem CodePython-Anwendungsfehler bei Google App Engine

Internal Server Error 

The server has either erred or is incapable of performing the requested operation. 

Traceback (most recent call last): 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~leoapp109/1.391952730855998659/main.py", line 32, in get 
    lastTweet = db.GqlQuery("SELECT * FROM LastTweet").fetch(1)[0] 
IndexError: list index out of range 

Dies ist mein Code

#!/usr/bin/env python 
#**strong text** 
# Copyright 2007 Google Inc. 

import datetime 
from google.appengine.ext import db 
import webapp2 
import time 
import sys 
import random 
from twython import Twython, TwythonError 
from google.appengine.ext import db 

class LastTweet(db.Model): 
    tweetId = db.StringProperty() 

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     idnum = 0 
     lastTweet = db.GqlQuery("SELECT * FROM LastTweet").fetch(1)[0] 

#  try: 
#   lastTweet = LastTweet.all() 
#  except: 
#   lastTweet = None 
#  if lastTweet != None: 
#   idnum = lastTweet.tweetId 
#  else: 
#   idnum = "0" 


     apiKey = 'QQQ' 
     apiSecret = 'QQQ' 
     accessToken = 'QQQ' 
     accessTokenSecret = 'QQQ' 
     twitter = Twython(apiKey,apiSecret,accessToken,accessTokenSecret) 
     message = "Hi, if you Love Wine you will Love to Wear this Wine T-Shirt www.teespring.com/WineT" 
     search_results = twitter.search(q="#Winelover", since_id = idnum, count=20) 
     print(search_results) 
     for tweet in search_results["statuses"]: 
      screenname = "@" + tweet["user"]["screen_name"]+" "; 
      print tweet["id_str"] 
      try: 
       #self.response.write('Hello world!') 
       twitter.update_status(status=screenname + message, in_reply_to_status_id=tweet["id_str"]) 
      except TwythonError: 
       pass 
      idnum = tweet["id_str"] 
      print(idnum) 
     if search_results: 
      lastTweet.tweetId = idnum 
      lastTweet.put() 

     # self.response.write('Hello world!') 

app = webapp2.WSGIApplication([ 
    ('/', MainHandler) 
], debug=True) 
+0

Können Sie die Traceback bitte formatieren? Bearbeiten Sie Ihren Post, wählen Sie die Traceback und klicken Sie auf den Code geschweiften Klammern. – snakecharmerb

+0

Es sieht so aus, als würde Ihr Abruf einen leeren Container zurückgeben. – cdarke

Antwort

1

Die letzte Zeile der Zurückverfolgungs die Codezeile identifiziert das Problem verursacht:

lastTweet = db.GqlQuery("SELECT * FROM LastTweet").fetch(1)[0] 

und sagt uns, was das Problem ist:

IndexError: list index out of range

Ihr Code erwartet das Ergebnis db.GqlQuery("SELECT * FROM LastTweet").fetch(1) als list und weist das erste Element dieser Liste - das Element mit dem Index 0 - lastTweet zu. Die Liste ist jedoch leer, daher gibt es kein Element im Index 0 und Sie erhalten eine IndexError.

Um dies zu beheben, müssen Sie entweder den Code in einem Try/außer Block wickeln die Ausnahme

try: 
    lastTweet = db.GqlQuery("SELECT * FROM LastTweet").fetch(1)[0] 
except IndexError: 
    lastTweet = None # or whatever 

Oder wenn Sie nur einen einzigen Tweet holen zu handhaben, wie es der Fall zu sein scheint, rufen Sie die Abfrage get Methode zum Abrufen des Tweets oder keine:

+0

hey danke für die Beantwortung meiner Frage Ich habe versucht, Ihren Code funktioniert nicht, ich habe meinen Code oben enthalten kann es überprüfen. – Leonardo19