2015-11-16 24 views
1

我有點茫然。我正在初始化字典中的字典,它一切正常,直到我想檢查while語句中定義的值。儘管密鑰存在字典鍵錯誤

那裏我得到一個關鍵的錯誤「ScreenWidth」。 我的第一次嘗試是,通過將整個字典寫入.txt文件,然後查看我在此時訪問的子字典部分本身,是否意外修改了這個變量。所有這些工作並使我得到結果I預計但仍在我發現關鍵錯誤的時候。

初始化:

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 

txt文件中的值:

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!='Screenwidth'(區分大小寫!)。看到while循環行。 – JCOC611

+0

tnx現在重讀了幾個小時 - 我看了所有的重要性,但不是在這種情況下。 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#一樣好。否則我不會在python中打擾(也是Windows用戶在這裏^^) – Thomas