2013-10-10 2 views
-1

Я использую Python. Я пытаюсь сохранить счет в рекурсивном методе. Я получаю сообщение об ошибке, когда использую count+=1. Почему это? Я также получаю сообщение об ошибке, когда использую sum=sum+count. Это ошибка:Поддержание количества в методе рекурсии?

local variable 'count' referenced before assignment

Вот мой код:

def receiveOnePing(mySocket, ID, timeout, destAddr): 
    #receives ping 
    timeLeft = timeout 
    while 1: 
     startedSelect = time.time() 
     whatReady = select.select([mySocket], [], [], timeLeft) 
     howLongInSelect = (time.time() - startedSelect) 
     if whatReady[0] == []: # Timeout 
      return "Request timed out." 
     timeReceived = time.time() 
     recPacket, addr = mySocket.recvfrom(1024) 
     header = recPacket[20:28] 
     type, code, checksum, id, sequence= struct.unpack("bbHHh", header)  
     if id ==ID: 
      sizeofdouble = struct.calcsize("d")#returns size of structure 
      timeSent = struct.unpack("d", recPacket[28 : 28+sizeofdouble])[0] 
      print "Type:%d Code:%d Checksum:0x%08x Packet ID:%d Sequence:%d RTT:%d ms % (type, code, checksum, id, sequence, rtt) 
      count+=1 
     timeLeft = timeLeft - howLongInSelect 
     if timeLeft <= 0: 
      return "Request timed out." 
     else : 
      return "REPLY from %s " % destAddr    
+0

Формат ваш код правильно –

+0

Вам нужно' подсчет = 0'.Если вы не первый присваиваете 'count', то' count = count + 1' не имеет никакого смысла. – Shashank

+0

Связано с http://stackoverflow.com/questions/19259837/i-cannot- print-the-final-value-of-a-variable/19259914 # 19259914 –

ответ

2

Вы еще не присвоен количество имен для объекта. Вам необходимо присвоить счету, прежде чем ссылаться на него. Попытка:

count = 0 

Прежде чем вы попробуете count += 1.

+0

Да, я понимаю, но когда я ставлю count = 0 вне метода рекурсии, он все равно дает мне эту ошибку – user2847851

+0

, и если я положил count = 0 ввнутри метода, счет остается 1 – user2847851

+0

Если ваш счет остается 1, то идентификатор может не совпадать с ID. –

2

Вы не конец строки на прямой печати «Тип .... Вам нужно концовки кавычку на этой линии.

Смежные вопросы