2016-08-16 101 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在函數調用之前需要函數定義。 個人而言,我更喜歡單塊示例,您可以不必考慮即可鍵入(或複製/粘貼),並且它可以立即運行。

相關問題