Python 为什么不';t全局变量在这里工作?

Python 为什么不';t全局变量在这里工作?,python,flask,Python,Flask,我正试图使用Twitter API创建我自己的私有API,以便在我的PC上本地运行 请参阅下面的代码: from flask import Flask import tweepy, json from tweepy import Stream from tweepy.streaming import StreamListener app = Flask(__name__) @app.route('/') def example(): global clean_data c

我正试图使用Twitter API创建我自己的私有API,以便在我的PC上本地运行

请参阅下面的代码:

from flask import Flask
import tweepy, json
from tweepy import Stream
from tweepy.streaming import StreamListener

app = Flask(__name__)


@app.route('/')
def example():
    global clean_data

    class StdOutListener(StreamListener):
        def on_data(self, data):
            global clean_data
            clean_data = json.loads(data) 
            return clean_data
        
    def setUpAuth():
        # authentication and stuff here

    def followStream():
        api, auth = setUpAuth()
        listener = StdOutListener()
        stream = Stream(auth, listener)
        stream.filter(track=["@user"], is_async=True, stall_warnings=True)

    followStream()

    return clean_data

if __name__ == '__main__':
    app.run()
clean_data
是twitter返回的JSON,a是我想在flask上显示的内容,但它一直返回500个错误,并且控制台输出的
clean_data未定义

这是我的代码的一个非常简化的版本,但足以说明我得到的错误。我做错了什么


如果我只是将
clean_data
定义为一个随机字符串,也会发生同样的事情。

问题在于
StdOutListener.on_data
是异步代码中的一种回调函数,所以你不知道它确切的调用时间,也不知道何时会收到一些数据,因此,如果您想处理在StdOutListener中接收到的数据,则需要通过promises或其他回调/异步函数重新思考和重新设计代码。在调用
on_data()
之前,不会定义on_data

清除数据,但您正在从函数返回它(可能在此之前)。因此,您需要询问,何时定义该变量?对\u data
调用是异步的,它可能会在
followStream()
之后被调用,也可能不会被调用。可能是第一个
全局清除\u data
导致了问题。您能否尝试将其更改为类似于
clean_data=None
(无
global
)的值,并告诉我们问题是否仍然存在?@DiegoMiguel好的,这将导致
对_data
分配一个完全不同的变量,然后<代码>示例
将始终返回
None
。无论如何,它无法解决OP依赖于异步调用的基本问题,异步调用的工作方式与同步调用类似。