[英]try and except not working
嗨,我有以下代碼。 當我運行getDetails函數時,try:可以工作,但異常無法正確顯示。
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,但是當我執行程序時它不會以這種方式出現
問題位於此處:
if regNumber in data_dict:
print data_dict[regNumber]
當您詢問字典中是否存在regNumber
由於不會出現regNumber
情況,您不會嘗試建立索引,因此不會引發KeyError
異常,因此永遠不會引發異常。
如果要引發異常,請執行以下操作:
print data_dict[regNumber]
在您的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
我更喜歡第一種樣式,因為異常的代價很高,當然,如果您知道只有很少數量的鍵,這些鍵在字典中不存在並且會導致異常,那么您可以優化第二種方式。
並且應該重寫您的addRegistration
函數以測試密鑰是否已經存在並通知用戶,否則添加數據,因為它不會警告您或如果密鑰已經存在則引發異常,它只會更新/替換數據對於那個關鍵。
if regNumber in data_dict:
print data_dict[regNumber]
您在訪問data_dict
之前data_dict
。 如果regNumber
不在dict
則它將不會嘗試訪問它。 因此,不會引發異常。
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
測試中的if regNumber in data_dict
。 如果代碼不在詞典中,則它將永遠不會嘗試查找它。
也許您的意思是:
def getDetails(regNumber):
if regNumber in data_dict:
print data_dict[regNumber]
else:
printNow(regNumber, "not in dictionary")
問題是
try:
if regNumber in data_dict:
print data_dict[regNumber]
#print data_dict.get(regNumber)
except:
printNow(regNumber, "not in dictionary")
如果regNumber
不在data_dict
,則不會發生異常。 更改為:
try:
print data_dict[regNumber]
except:
printNow(regNumber, "not in dictionary")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.