2015-11-16 2 views
1

Я немного в растерянности. Я инициализирую словарь в словаре, и он отлично работает, пока я не захочу проверить значение, определенное внутри оператора while.Ошибка ключевого слова словаря, несмотря на существующий ключ

Там я получаю ключевую ошибку для «ScreenWidth». Мои первые попытки состояли в том, чтобы увидеть, была ли переменная случайно изменена путем записи всего словаря в файл .txt, а затем самого элемента subdictionary, к которому я обращаюсь в то время ..... все, что работает, и дает мне результаты I ожидаемый, но все же внутри, пока я не ошибаюсь.

Initialization:

def __init__(self): 
     self.Data = { 
      'Configuration': { 'MaxMapWidth': 256, 'MaxMapHeight': 256, 
           'TileWidth': 1216, 'TileHeight': 694, 
           'ScreenWidth': 1366, 'ScreenHeight': 768, 
           'MaxBiewDistance': 10 }, 
      'Map': {}, 
      'Tiles': {}, 
      'Player': { 
       'Position': { 'MapName': None, 'X': 1, 'Y': 1, 'Direction': 0 }# in degree } 

      } 
     } 

Метод:

def MyDo(self): 
     f = open("e:\\test\\test.txt", "w") 
     for key in self.Data: 
      f.write(key + "\n") 
      for subkey in self.Data[key]: 
       f.write(" " + subkey + "\n") 

       if ("Configuration" in key): 
        f.write("   " + str(self.Data[key][subkey]) + "\n"); 
     rayNumber = 0 

     f.write(str(self.Data['Configuration']['ScreenWidth'])) 
     while (rayNumber < self.Data['Configuration']['Screenwidth']): 
      #.... do my thing 
      rayNumber = rayNumber + 1 

Значения внутри текстового файла:

Map 
    Forest 
Tiles 
    tile003 
    tile002 
    tile001 
    tile007 
    tile006 
    tile005 
Configuration 
    ScreenHeight 
      768 
    ScreenWidth 
      1366 
    MaxMapWidth 
      256 
    TileHeight 
      694 
    TileWidth 
      1216 
    MaxBiewDistance 
      10 
    MaxMapHeight 
      256 
Player 
    Position 
1366 

Помимо ключевых ошибок я бы сказал, все это работает по назначению. Итак, мой вопрос заключается в том, что вызывает эту ключевую ошибку (особенно, поскольку все кажется правильной и существующей)?

+4

Может быть, потому что ''ScreenWidth'! = 'Ширина экрана' (чувствительная к регистру!). См. Строку while while. – JCOC611

+0

tnx перепробовал это сейчас часами. Я посмотрел на все prnounciation, .... но не на случай. tnx – Thomas

+0

Кстати, было бы хорошо знать, почему -1 (из того, что я увидел, вопрос ясен, что это что-то нелепо, как письмо, которое было упущено, не должно присуждать - насколько я знаю, таким образом было бы приятно знать почему) – Thomas

ответ

1

Вы делаете случай ошибку - присмотритесь:

f.write(str(self.Data['Configuration']['ScreenWidth'])) 
     while (rayNumber < self.Data['Configuration']['Screenwidth']): 

В первый раз пишется с заглавной W, второй раз с строчной один. Это две разные, несвязанные под-ключи.

+0

Вот и все. Я действительно ненавижу, когда это происходит ..... смотрел на все, кроме w/W. tnx будет принимать, как только stackoverflow позволяет мне – Thomas

+0

Чувствительность к регистру чаще всего беспокоит, чем помощь - увы, язык Python чувствителен к регистру, и поэтому большинство файловых систем, и я ненавижу это (я пропускаю нечувствительность к регистру например, Pascal и файловые системы Windows - хотя я не пропустил это достаточно, чтобы заставить меня вернуться к этим технологиям :-). Хотя бы для структур данных, которые вы контролируете, вы можете сделать все клавиши в нижнем регистре. –

+0

Я просто привык к camelcase так же хорошо, как и все благодаря C#. Else, я бы не стал беспокоиться в python (также пользователь Windows здесь ^^) – Thomas

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