Verschwenden Sie keine Zeit damit.
Wenn Sie stattdessen mit MemoryError
Ausnahmen spielen möchten, erstellen Sie ein Design, das Objektkonstruktion isoliert, so dass Sie es testen können.
Statt dieser
for i in range(1000000000000000000000):
try:
y = AnotherClass()
except MemoryError:
# the thing we wanted to test
Betrachten Sie diese.
for i in range(1000000000000000000000):
try:
y = makeAnotherClass()
except MemoryError:
# the thing we wanted to test
Dies erfordert eine winzige Ergänzung zu Ihrem Design.
class AnotherClass(object):
def __init__(self, *args, **kw):
blah blah blah
def makeAnotherClass(*args, **kw):
return AnotherClass(*args, **kw)
Die Zusatzfunktion - auf lange Sicht - erweist sich als gutes Designmuster. Es ist ein Factory, und Sie brauchen oft so etwas.
Sie können diese mit etwas wie diesem ersetzen.
class Maker(object):
def __init__(self, count= 12):
self.count= count
def __call__(self, *args, **kw):
if self.count == 0:
raise MemoryError
self.count -= 1
return AnotherClass(*args, **kw)
makeAnotherClass= Maker(count=12)
wird diese Version eine Ausnahme auslösen, ohne dass Sie Speicher in irgendeiner obskuren, unsupportable, komplexe oder magische Art und Weise zu begrenzen ist.
Thank you! Genau das, was ich brauchte. –