Sto cercando di catturare un'eccezione in un thread e re-raise nel thread principale:Re-raise eccezione Python e conservare traccia dello stack
import threading
import sys
class FailingThread(threading.Thread):
def run(self):
try:
raise ValueError('x')
except ValueError:
self.exc_info = sys.exc_info()
failingThread = FailingThread()
failingThread.start()
failingThread.join()
print failingThread.exc_info
raise failingThread.exc_info[1]
Questo funziona in pratica e produce il seguente output:
(<type 'exceptions.ValueError'>, ValueError('x',), <traceback object at 0x1004cc320>)
Traceback (most recent call last):
File "test.py", line 16, in <module>
raise failingThread.exc_info[1]
Tuttavia, la fonte dell'eccezione punta alla riga 16, dove si è verificato il controrilancio. L'eccezione originale viene dalla linea 7. Come devo modificare il principale filo modo che l'uscita si legge:
Traceback (most recent call last):
File "test.py", line 7, in <module>
impressionante, ho ri-Sollevare eccezioni da altri thread troppo, ma mai andato, per quanto si vuole :) –
possibile duplicato ["Eccezione interna" (con traceback) in Python?] (Http://stackoverflow.com/questions/1350671/inner-exception-with-traceback-in-python) –