2016-08-16 88 views
0

我一直沿着“黑帽子python”书,当我在这个特定的代码中键入我得到的错误“全球名称server_loop()没有定义” 。这里是之前有错误的main()函数的声明:Python错误:“全局名称server_loop()没有定义”

if listen: 
    server_loop() 

这里是server_loop()函数在main()函数:

def server_loop(): 
global target 

# if no target is defined, we listen on all interfaces 
if (not len(target)): 
    target = "0.0.0.0" 

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.bind((target, port)) 
server.listen(5) 

while True: 
    client_socket, addr = server.accept() 

    # spin off a thread to handle our new client 
    client_thread = threading.Thread(target=client_handler, args=(client_socket,)) 
    client_thread.start() 

感谢

+2

您的缩进对于server_loop是错误的。低于def的所有东西都应该缩进。另外,你没有定义目标。你的'全球目标'声明只是说要使用全球,但在你显示的代码中没有一个 –

+0

你是对的,但我认为缩进不是这里的问题,只是一个后期问题。 –

+0

@ Jean-FrançoisFabre提供的答案,这意味着书中的代码并不按照它应该的方式工作。也许这本书有错误? –

回答

1

希望我正确理解这个问题。

我可以很容易地重现您的情况:

something() 

def something(): 
    pass 

我得到

Traceback (most recent call last): 
    File "<string>", line 420, in run_nodebug 
    File "<module1>", line 1, in <module> 
NameError: name 'something' is not defined 

如果我已经将它定义它的工作原理之后,调用something

在使用它们之前定义函数。

我想你的书只是以颠倒的顺序给出了信息(top => down,从global/main到implementation/function),期望你知道作为很多语言,python在函数调用之前需要函数定义。 个人而言,我更喜欢单块示例,您可以不必考虑即可键入(或复制/粘贴),并且它可以立即运行。

相关问题