2015-01-22 2 views
-1

Я работаю над проектом, и эта ошибка продолжает появляться:NameError: глобальное имя «переменная» не определена питон

class PRNG: 
    def __init__(self): 
    # parameters 
    # P-256 prime 
    self.p=115792089210356248762697446949407573530086143415290314195533631308867097853951 

    self.a=self.p-3 
    self.b=41058363725152142129326129780047268409114441015993725554835256314039467401291 
    self.E=curve(self.a,self.b,self.p) 

    self.E.n=115792089210356248762697446949407573529996955224135760342422259061068512044369 

    self.P=point(0,46263761741508638697010950048709651021688891777877937875096931459006746039284) 
    self.k=183521403747637560534595403690771364941493702673414885451510208165414833985 
    self.Q=mult(self.k,self.P,self.E) 

    self.t=bytes_to_int(os.urandom(32)) # initial seed 
    #print self.t 
    self.output_length=240 
    self.truncate_length=16 

    def function_attack(self, nbytes, predicted_state): 
     calls = ((nbytes*8-1)/self.output_length)+1 
     out = '' 
     for i in xrange(calls): 
      tP=mult(predicted_state,self.P,self.E) 
      s=tP.x 
      sQ=mult(s,self.Q,self.E) 
      r=sQ.x 
      r_out=r % (2**self.output_length) 
      self.t=s 
      out = out + int_to_bytes(r_out, self.output_length/8) 
     return out[:nbytes] 

def function(self, nbytes): 
     calls = ((nbytes*8-1)/self.output_length)+1 
     out = '' 
     for i in xrange(calls): 
      tP=mult(self.t,self.P,self.E) 
      s=tP.x 
      sQ=mult(s,self.Q,self.E) 
      r=sQ.x 
      r_out=r % (2**self.output_length) 
      self.t=s 
      out = out + int_to_bytes(r_out, self.output_length/8) 
     return out[:nbytes] 

Первый метод вызывается в отдельном файле, а выход всегда следующее (независимо, если я сменю имя локальной переменной вызывает):

File "C:\file1.py", line 32, in <module> 
    prng = PRNG() 
    File "C:\file_where_error_occurs.py", line 286, in __init__ 
    for i in xrange(calls): 
NameError: global name 'calls' is not defined 

Что питон делает?

+0

что такое PRNG? нам кажется, что мы пропустили какую-то важную информацию здесь ., пожалуйста, отправьте пример, который мы можем запустить, и дадим ту же самую ошибку. –

+0

Итак, я вижу, что я получил нисходящий голос, который, скажем, может быть прекрасным (поскольку Я раньше не программировал на python), но я больше удивляюсь голосованию, чтобы закрыть вопрос. @CloseVoter. Укажите, почему этот вопрос не соответствует теме. – Sebi

+0

Попробуйте «распечатать вызовы» перед использованием. Вы можете быть удивлены ... – alfasin

ответ

0

у вас есть ошибки отступов ... это, как правило, вызвано смешением вкладки и пространства ... наиболее достойные редакторы могут исправить это для вас легко ... видеть ваши ошибки отступа запустить программу как

python -tt my_program.py 
+0

Я переписал функции, и они действительно были проблемами с отступом. Я использую notepad ++ и, визуально, треска действительна. К сожалению, теперь есть еще один: AttributeError: экземпляр PRNG не имеет атрибута 'get_randomness'. Похоже, что этот метод больше не находится в классе. Я выполнил приведенную выше команду. В комментарии не было указано никаких ошибок, кроме упомянутых выше. – Sebi

+0

'def randomness (self, whatever)' не имеет никакого отношения к глобальному уровню, отступая его от уровня внутреннего класса класса .... и используйте среду IDE, которая будет управлять вашими пробелами/вкладками для вас (например, pycharm или eclipse) ... также, если это отвечает на ваш первоначальный вопрос, вы, вероятно, должны принять его ... –

+0

Отступ к внутреннему методу класса. – Sebi

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