【问题标题】:Unraised exception using Tweepy and MySQL使用 Tweepy 和 MySQL 未引发的异常
【发布时间】:2015-03-05 03:25:26
【问题描述】:

我正在尝试使用 Tweepy 将推文存储在 MySQL 数据库中。代码工作正常,除了一旦我尝试执行 SQL 命令将数据插入数据库。代码如下:

#MySQL connection attempt
try:
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor()
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("Something is wrong with your user name or password")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("Database does not exist")
    else:
        print(err)

class StdOutListener(StreamListener):
    def on_data(self, data):
        tweet = json.loads(data) #loads JSON data into list for python
        #Parameters for SQL insert
        try:
            user_id = tweet['user']['id']
        except IndexError:
            print("Critical error: User ID not found")
            return
        try:
            username = tweet['user']['screen_name']
        except IndexError:
            print("Critical error: Username not found")
            return
        try:
            avatar = tweet['user']['profile_image_url']
        except IndexError:
            return
        try:
            tweet_id = tweet['id']
        except IndexError:
            print("Critical error: Tweet ID not found")
            return
        try:
            content = tweet['text']
        except IndexError:
            print("Critical error: Tweet Content not found")
            return
        try:
            #converts Twitter's date format into MySQL DATETIME
            posted = time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))
        except IndexError:
            print("Critical error: created_at not found")
            return

        #MySQL insert query
        try:
            cursor.execute("INSERT INTO tweets (user_id, username, avatar, tweet_id, content, posted) VALUES (%%s, %%s, %%s, %%s, %%s, %%s)",(user_id, username, avatar, tweet_id, content, posted))
        except RuntimeError:
            print("Runtime error")
        print("TEST")
        cnx.commit()
        return True

    def on_error(self, status):
        print(status)




if __name__ == '__main__':
    l = StdOutListener()
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)

    stream = Stream(auth, l)
    print("Starting Twitter Stream")
    stream.filter(track=['bob'], languages=["en"])

然后,运行时出现以下错误:

Traceback (most recent call last):
  File "C:/Users/Wilson/PycharmProjects/Avalon/Twitter.py", line 95, in <module>
    stream.filter(track=['*', '**', '***', '****'], languages=["en"])
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 428, in filter
    self._start(async)
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 346, in _start
    self._run()
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 286, in _run
    raise
RuntimeError: No active exception to reraise

我已将它隔离到执行 MySQL 查询的行。

【问题讨论】:

  • 你用什么包来连接你的 MySQL 数据库?

标签: python python-3.x mysql-connector tweepy


【解决方案1】:

通过在https://github.com/tweepy/tweepy/blob/master/tweepy/streaming.py 检查 tweepy/streaming.py,似乎 tweepy 在处理异常的方式上存在错误,特别是

    if exception:
        # call a handler first so that the exception can be logged.
        self.listener.on_exception(exception)
        raise

这个raise应该是raise exception

【讨论】:

  • 有办法解决这个问题吗?
  • 将 tweepy 克隆到您的存储库中并修复问题或提出拉取请求。他们应该接受它。
  • 在 Ubunut/Linux 的 /usr/local/lib/python3.4/dist-packages/tweepy/streaming.py 中将 raise Exception 替换为 raise Exception
猜你喜欢
  • 2013-04-12
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多