我有以下代碼:避免RuntimeError用圓圈參考
class Cell(object):
def eval(self):
raise NotImplementedError
class RefCell(Cell):
def __init__(self, cell=None):
self.next_cell = cell
def set_next(self, cell):
self.next_cell = cell
if self.next_cell:
try:
check = self.next_cell.eval()
except AttributeError:
pass
else:
if check == self:
raise Exception
def eval(self):
return self.next_cell.eval()
c1 = RefCell()
c2 = RefCell()
c3 = RefCell()
c4 = RefCell()
c1.set_next(c2)
c2.set_next(c3)
c3.set_next(c4)
c4.set_next(c2)
我試圖避免RuntimeError我遇到的時候:
c4.set_next(c2)
但我就是想不通我可以捕捉到圈子參考,並拋出我的一般例外,而不是我碰到這個:
RuntimeError: maximum recursion depth exceeded while calling a Python object
我會ap預示着任何想法。
'eval'背後的想法是什麼?您可以prolly將根父級作爲參數傳遞給它,並在'self == parent'時引發異常。 –
只要控制流進入'RefCell'的'eval'方法,就沒有出路。你是否想要檢測循環引用? – Jasper
@賈斯珀正好 –