2016-04-09 8 views
-2

Ich bin neu in Python, ziemlich gewöhnt an C-style-Programmierung und ich habe einen Fehler mit "if" -Anweisung in Python. Ich versuche eine Variable in einer while-Schleife zu inkrementieren; Verwenden Sie eine "if" -Anweisung, um es vor dem Drucken zu überprüfen, aber es funktioniert aus irgendeinem Grund nicht. Hier ist der Code unten, ich ähnliche Fehler sah, konnte aber nicht anwenden, was ich von dort bekamIF-Anweisung funktioniert nicht Python

import socket 
import time 
import threading 

tLock = threading.Lock() 
shutdown = False 
kt = 0 

def receving(name, sock): 
    while not shutdown: 
     try: 
      tLock.acquire() 
      while True: 
       data, addr = sock.recvfrom(1024) 
       if kt > 0: 
        print str(kt) 
       kt = kt+1 

    except: 
     pass 
    finally: 
     tLock.release() 

host = '127.0.0.1' 
port = 0 

server = ('127.0.0.1',5000) 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.bind((host, port)) 
s.setblocking(0) 

rT = threading.Thread(target=receving, args=("RecvThread",s)) 
rT.start() 

alias = raw_input("Please Enter Your Name: ") 
message = raw_input(alias + " Please Enter Your Password:") 
while message != 'q': 
    if message != '': 
     s.sendto(alias + ":" + message, server) 
    tLock.acquire() 
    message = raw_input(alias + "-> ") 
    tLock.release() 
    time.sleep(0.2) 

shudown = True 
rT.join() 
s.close() 

Und hier ist der Server Import Socket Importzeit Import

host = '127.0.0.1' 
port = 5000 

clients = [] 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.bind((host,port)) 
s.setblocking(0) 

checkpass = False 
quitting = False 
print "Server Started." 

while not quitting: 
    try: 
     data, addr = s.recvfrom(1024) 
     if checkpass == False:  
      userNa,passWo = data.split(":") 
     daata =[line.strip() for line in open("passFile.txt",'r')] 
     for index,item in enumerate(daata):    
      if userNa == daata[index] and passWo ==daata[index+1]: 
       checkpass = True 
       print "Welcome " + userNa +" You have successfully logged in!"      
        break; 
      else: 
       print "Your username and/or password was incorrect try again" 


    else: 
     print "well we tried" 

     if "Quit" in str(data): 
      quitting = True 
     if addr not in clients: 
      clients.append(addr) 

     print time.ctime(time.time()) + str(addr) + ": :" + str(data) 
     for client in clients: 
      s.sendto(data, client) 
    except: 
     pass 
s.close() 
+4

Was Sie sehen und was erwarten Sie zu sehen ? – kjschiroo

+0

Welcher Fehler? .... – Signal

+3

Bitte posten Sie ein kurzes, ** vollständiges ** Programm, das den Fehler anzeigt, den Sie sehen. Bitte schreiben Sie die Ausgabe, die Sie sehen, und die Ausgabe, die Sie erwartet haben. Für weitere Informationen lesen Sie bitte [mcve] und [fragen]. –

Antwort

0

Ihr Code shouldn Einfädeln‘ t laufen. In der Funktion receving sollten Sie eine UnboundLocalError Ausnahme erhalten:

In [5]: kt = 0 

In [6]: def test(s): 
    print('{} test'.format(s)) 
    print('value of kt:', kt) 
    kt = kt + 1 
    ...:  

In [7]: test('first') 
first test 
--------------------------------------------------------------------------- 
UnboundLocalError       Traceback (most recent call last) 
<ipython-input-7-0e641494ca48> in <module>() 
----> 1 test('first') 

<ipython-input-6-c37035372993> in test(s) 
     1 def test(s): 
     2  print('{} test'.format(s)) 
----> 3  print('value of kt:', kt) 
     4  kt = kt + 1 
     5 

UnboundLocalError: local variable 'kt' referenced before assignment 

Sie sollten die global Anweisung innerhalb der Funktion verwenden.

In [8]: def test2(s): 
    ...:  global kt 
    ...:  print('{} test'.format(s)) 
    ...:  print('value of kt:', kt) 
    ...:  kt = kt + 1 
    ...:  

In [9]: test2('first') 
first test 
value of kt: 0 

In [10]: test2('second') 
second test 
value of kt: 1 
-1

Geben Sie einen Tabulator an, außer, passieren schließlich tLock.release() ... versuchen und außer in derselben Vertiefung sein sollte ..