龙卷风示范代码,NameError:未定义名称'stream'

2024-05-13 21:42:08 发布

您现在位置:Python中文网/ 问答频道 /正文

import tornado.ioloop
import tornado.iostream
import socket

def send_request():
    stream.write(b"GET / HTTP/1.0\r\nHost: friendfeed.com\r\n\r\n")
    stream.read_until(b"\r\n\r\n", on_headers)

def on_headers(data):
    headers = {}
    for line in data.split(b"\r\n"):
       parts = line.split(b":")
       if len(parts) == 2:
           headers[parts[0].strip()] = parts[1].strip()
    stream.read_bytes(int(headers[b"Content-Length"]), on_body)

def on_body(data):
    print(data)
    stream.close()
    tornado.ioloop.IOLoop.current().stop()

if __name__ == '__main__':
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    stream = tornado.iostream.IOStream(s)
    stream.connect(("friendfeed.com", 80), send_request)
    tornado.ioloop.IOLoop.current().start()

http://www.tornadoweb.org/en/stable/iostream.html

这是python tornado文档中的一个演示代码,然后我做了一些修改:

^{pr2}$

我只是将最后四条语句移到一个main函数中,然后我错过了一个错误“NameError:name‘stream’is not defined”。 那么他们之间有什么区别呢?谢谢。在


Tags: importcomsenddatastreamonrequestdef
1条回答
网友
1楼 · 发布于 2024-05-13 21:42:08

您需要将stream对象定义为全局对象,因为其他函数都使用它。在

例如

def g():
    global stream
    stream = 4*x
    print stream

def f():
    global x
    x = 4
    print x

f()
g()

这将打印两个变量,并且没有错误。在

因此,使用

^{pr2}$

相关问题 更多 >