Python mit ... wie für benutzerdefinierten Kontextmanager
Ich habe einen einfachen Kontextmanager in Python geschrieben, um mit Unit-Tests umzugehen (und Kontextmanager zu erlernen):
class TestContext(object):
test_count=1
def __init__(self):
self.test_number = TestContext.test_count
TestContext.test_count += 1
def __enter__(self):
pass
def __exit__(self, exc_type, exc_value, exc_traceback):
if exc_value == None:
print 'Test %d passed' %self.test_number
else:
print 'Test %d failed: %s' %(self.test_number, exc_value)
return True
Wenn ich einen Test wie folgt schreibe, funktioniert alles in Ordnung.
test = TestContext()
with test:
print 'running test %d....' %test.test_number
raise Exception('this test failed')
Wenn ich jedoch versuche, mit ... as zu arbeiten, erhalte ich keinen Verweis auf das TestContext () - Objekt. Läuft dies:
with TestContext() as t:
print t.test_number
Löst die Ausnahme aus'NoneType' object has no attribute 'test_number'
.
Wo gehe ich falsch?