По-видимому, когда мой обработчик сигнала выходит, моя программа ПРОДОЛЖАЕТСЯ ПРОДОЛЖИТЬ. это видно из исключения, поднятого даже ПОСЛЕ «log Done, close now». Может кто-нибудь объяснить, почему это так? Обратите внимание, что функции были упрощеныОбработчик сигналов выходит, но программа продолжает работать?
^Clog Ctrl-C
backup State: not_span 328, pos 22, all_cycles 19
backup backup complete, you may force exit now
log Done, close now
Traceback (most recent call last):
File "singleEdger.py", line 219, in <module>
mySingleEdger.outputAllCycles()
File "singleEdger.py", line 141, in outputAllCycles
r = self.returnCycle(self.dfs_tree, self.not_span[self.pos])
File "singleEdger.py", line 72, in returnCycle
udfs = nx.Graph(dfs) # The trick is to make it undirected
File "/var/lib/python-support/python2.6/networkx/graph.py", line 86, in __init__
convert.from_whatever(data,create_using=self)
File "/var/lib/python-support/python2.6/networkx/convert.py", line 76, in from_whatever
"Input is not a correct NetworkX graph."
networkx.exception.NetworkXError: Input is not a correct NetworkX graph.
Эти функции для справки
def sigHandler(self, arg1, arg2):
out('log', 'Ctrl-C')
self.backup()
out('log', 'Done, close now')
exit()
def outputAllCycles(self):
while self.pos < len(self.not_span):
r = self.returnCycle(self.dfs_tree, self.not_span[self.pos])
if r:
self.all_cycles.append(r)
for each in r: # now it's [ (3,4), (5,6) ]
each = (sellHash(each[0]), sellHash(each[1]))
self.outfo.write(each[0] +'\t'+ each[1])
self.outfo.write('\n')
self.outfo.write('\n')
self.pos += 1
out("singleEdger", "outputAllCycles done")
def backup(self):
out('backup', 'State: not_span %i, pos %i, all_cycles %i' % (len(self.not_span), self.pos, len(self.all_cycles)))
out('backup', 'backup complete, you may force exit now')
ОК забавная вещь ИНОГДА, это случается, иногда это не так. Так что я действительно не знаю, чему доверять. – 2009-08-12 08:23:33
На самом деле, это смешно, так как я думаю, что это может быть связано с тем, как ОС обрабатывает питон, но я не уверен – 2009-08-12 08:33:31
Также обратите внимание, что исключение SystemExit не приведет к тому, что система выйдет из системы. Если поймать и обработать обработчик исключений, код будет продолжать работать, как будто ничего не произошло. – Cide