2012-05-15 100 views
1

嗨,我有以下代碼。當我運行getDetails函數時,嘗試: 確實有效,但異常無法正常顯示。嘗試和除了不工作

data_dict = {} 
dict_list = [] 
def createNameDict(filename): 
    path = "C:\Users\user\Desktop" 
    basename = "ParkingData_Part2.txt" 
    filename = path + "//" + basename 
    file = open(filename) 
    contents = file.read() 
    print contents,"\n" 


    data_list = [lines.split(",") for lines in contents.split("\n")] 



    for line in data_list: 
    regNumber = line[0] 
    details = (line[1],line[2],line[3]) 

    data_dict[regNumber] = details 
    print data_dict,"\n" 
    print data_dict.items(),"\n" 

def getDetails(regNumber): 
    #if regNumber in data_dict: 
    try: 
     if regNumber in data_dict: 
     print data_dict[regNumber] 

     #print data_dict.get(regNumber) 
    except: 
     printNow(regNumber, "not in dictionary") 
    return 
def addRegistration(regNumber, details): 
    try: 
    data_dict[regNumber] = details 


    except: 
    print regNumber, "Key Already exist" 

#data_dict.update({regNumber:(details)}) 
    return data_dict 

輸出我是:

======= Loading Progam ======= 
>>> createNameDict("C:\Users\user\Desktop//ParkingData_Part2.txt") 
EDF768, Bill Meyer, 2456, Vet_Parking 
TY5678, Jane Miller, 8987, AgHort_Parking 
GEF123, Jill Black, 3456, Creche_Parking 
ABC234, Fred Greenside, 2345, AgHort_Parking 
GH7682, Clara Hill, 7689, AgHort_Parking 
JU9807, Jacky Blair, 7867, Vet_Parking 
KLOI98, Martha Miller, 4563, Vet_Parking 
ADF645, Cloe Freckle, 6789, Vet_Parking 
DF7800, Jacko Frizzle, 4532, Creche_Parking 
WER546, Olga Grey, 9898, Creche_Parking 
HUY768, Wilbur Matty, 8912, Creche_Parking 

{'HUY768': (' Wilbur Matty', ' 8912', ' Creche_Parking'), 'GH7682': (' Clara Hill', ' 7689', ' AgHort_Parking'), 'GEF123': (' Jill Black', ' 3456', ' Creche_Parking'), 'WER546': (' Olga Grey', ' 9898', ' Creche_Parking'), 'TY5678': (' Jane Miller', ' 8987', ' AgHort_Parking'), 'ABC234': (' Fred Greenside', ' 2345', ' AgHort_Parking'), 'KLOI98': (' Martha Miller', ' 4563', ' Vet_Parking'), 'EDF768': (' Bill Meyer', ' 2456', ' Vet_Parking'), 'JU9807': (' Jacky Blair', ' 7867', ' Vet_Parking'), 'DF7800': (' Jacko Frizzle', ' 4532', ' Creche_Parking'), 'ADF645': (' Cloe Freckle', ' 6789', ' Vet_Parking')} 

[('HUY768', (' Wilbur Matty', ' 8912', ' Creche_Parking')), ('GH7682', (' Clara Hill', ' 7689', ' AgHort_Parking')), ('GEF123', (' Jill Black', ' 3456', ' Creche_Parking')), ('WER546', (' Olga Grey', ' 9898', ' Creche_Parking')), ('TY5678', (' Jane Miller', ' 8987', ' AgHort_Parking')), ('ABC234', (' Fred Greenside', ' 2345', ' AgHort_Parking')), ('KLOI98', (' Martha Miller', ' 4563', ' Vet_Parking')), ('EDF768', (' Bill Meyer', ' 2456', ' Vet_Parking')), ('JU9807', (' Jacky Blair', ' 7867', ' Vet_Parking')), ('DF7800', (' Jacko Frizzle', ' 4532', ' Creche_Parking')), ('ADF645', (' Cloe Freckle', ' 6789', ' Vet_Parking'))] 

>>> getDetails("GFT245") 

>>> getDetails("HUY768") 

(' Wilbur Matty', ' 8912', ' Creche_Parking') 
>>> getDetails("JU9807") 

(' Jacky Blair', ' 7867', ' Vet_Parking') 

>>> getDetails("GH7682") 

(' Clara Hill', ' 7689', ' AgHort_Parking') 
>>> 

如果GFT245不在字典它應該顯示 GFT245不是在字典 但其不來這樣當我執行程序

+0

我沒有看到代碼中定義的'printNow()'函數。 – larsks

回答

0
def getDetails(regNumber): 
    #if regNumber in data_dict: 
    try: 
     if regNumber in data_dict: 
     print data_dict[regNumber] 

     #print data_dict.get(regNumber) 
    except: 
     printNow(regNumber, "not in dictionary") 
    return 

沒有什麼在try塊實際上是失敗。

爲什麼?由於if regNumber in data_dict測試。如果代碼不在字典中,它將永遠不會嘗試查找它。

也許你的意思是這樣的:

def getDetails(regNumber): 
    if regNumber in data_dict: 
     print data_dict[regNumber] 
    else: 
     printNow(regNumber, "not in dictionary") 
2

的問題在這裏位於:

if regNumber in data_dict: 
    print data_dict[regNumber] 

當你問regNumber是否是或不是出現在字典中的異常將永遠不會提高由於regNumber不存在的情況下,您不會嘗試索引它,因此不會引起KeyError例外。

如果你想成爲然後引發的異常只是做:

print data_dict[regNumber] 
+0

雅現在工作謝謝堆 – nrj

+0

@nrj不客氣。請記住標記答案是正確的。 –

1
if regNumber in data_dict: 
    print data_dict[regNumber] 

你必須訪問data_dict前一個條件。如果regNumber不在dict那麼它不會嘗試訪問它。因此不會拋出異常。

0

問題是

try: 
    if regNumber in data_dict: 
    print data_dict[regNumber] 

    #print data_dict.get(regNumber) 
except: 
    printNow(regNumber, "not in dictionary") 

如果regNumberdata_dict,也不例外occures。將其更改爲:

try: 
    print data_dict[regNumber] 
except: 
    printNow(regNumber, "not in dictionary") 
2

在你getDetails功能except部分將永遠不會觸發因爲你明確檢查重點是在詞典中,你訪問它之前,你會想重新寫無論是作爲

if key in dict: 
    # The key exists and do something 
else: 
    # The key doesn't exist, notify the user 

try: 
    print dict[key] 
except KeyError: 
    # The key doesn't exist, notify the user 

我傾向於第一種例外的風格是昂貴的,當然,如果你知道,你只會有一個小NUM字典中不存在的鍵會導致異常,那麼您可以優化第二種方法。

而且您的addRegistration函數應該被重寫以測試密鑰是否已經存在並且通知用戶,否則添加數據,因爲它不會警告您或者如果密鑰已經存在則引發異常,它將會更新/替換該密鑰的數據。

+0

是的我正在嘗試現在鍛鍊addRegistration函數 – nrj