1
私は、隣接リストを使ってPython 3.xで(有向グラフ)の簡単な実装を書いています。私の問題は、私はセットの辞書を使用していますので、両方がKeyErrorの発生場所を特定するにはどうすればよいですか?
にKeyError例外を上げることができるということですclass Graph(object):
def __init__(self):
self.vertices = {}
def add_vertex(self, x):
""" Adds x to the graph, if it doesn't exist """
if x not in self.vertices:
self.vertices[x] = set()
else:
print("Error: vertex {} already in graph!".format(x))
def add_edge(self, x, y):
""" Adds the edge from x to y, if it doesn't exist """
try:
if y not in self.vertices[x]:
self.vertices[x].add(y)
else:
print("Error: edge already exists!")
except KeyError:
print("Error: vertex {} not found!".format(x))
def remove_edge(self, x, y):
""" Removes the edge from x to y, if it exists """
try:
self.vertices[x].remove(y)
except KeyError:
# QUESTION: which part of the try block caused the KeyError?
print("Error: vertex not found!")
:グラフのエッジを削除するには、私はこのようになります機能で探しています
self.vertices[x].remove(y)
Iがこれら2つの頂点(x
又はy
)のいずれかが存在しないことを示すエラーメッセージを印刷したい場合は、エラーが発生した行の一部を決定する方法はありますか?または、もう一度チェックして、エラーメッセージを(繰り返し)チェックの元に戻す必要がありますか?
(注:私はいくつかの論理エラーが上記のコードでそこにいることを認識 - 例えば、add_edgeは、xとyをチェックする必要が両方存在する)
スプリットにそれを試してみ応じ知りたい場合は: 'temp = self.vertices [x]'と 'temp.remove(y)'をそれぞれ別の 'try'ブロックに入れます。 – jasonharper
@jasonharper:答えを自由にしてください。他の誰も短い/読みやすいものが出てこない場合は、私はそれを受け入れます。 – tonysdg
エラーメッセージを印刷するためにグラフクラスが責任を負うのはなぜですか?既存のエッジを再追加したり、存在しないものを削除したりするとエラーが発生した場合は、グラフが例外を介して通信する必要があるようです。 – user2357112