1

こんにちは私は次のコードを持っています。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が辞書にないことを示しているはずですが、プログラムを実行するとそのようにはなりません。

4

5 に答える 5

2

問題はここにあります:

if regNumber in data_dict:
    print data_dict[regNumber]

regNumber辞書に存在するかどうかを尋ねているので、存在しregNumberない場合はインデックスを作成しようとしないため、例外が発生することはありません。したがって、KeyError例外は発生しません。

例外を発生させたい場合は、次のようにします。

print data_dict[regNumber]
于 2012-05-15T11:25:48.513 に答える
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

例外はコストがかかるため、最初のスタイルを好みます。もちろん、辞書に存在せず、例外を引き起こす少数のキーしかないことがわかっている場合は、2番目の方法を最適化できます。

そしてaddRegistration、キーが既に存在するかどうかをテストしてユーザーに通知するように関数を書き直す必要があります。それ以外の場合はデータを追加します。キーが既に存在する場合は警告したり例外を発生させたりしないため、データを更新/置換するだけです。その鍵。

于 2012-05-15T11:26:41.253 に答える
1
if regNumber in data_dict:
  print data_dict[regNumber]

にアクセスする前に条件がありますdata_dict。にない場合regNumberdict、アクセスを試みません。したがって、例外はスローされません。

于 2012-05-15T11:25:59.873 に答える
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")
于 2012-05-15T11:25:41.970 に答える
0

問題は

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")
于 2012-05-15T11:26:30.290 に答える