No pierdas el tiempo en esto.
En su lugar, si desea jugar con excepciones MemoryError
, cree un diseño que aísle la construcción del objeto para que pueda probarlo.
En lugar de esto
for i in range(1000000000000000000000):
try:
y = AnotherClass()
except MemoryError:
# the thing we wanted to test
considerar esto.
for i in range(1000000000000000000000):
try:
y = makeAnotherClass()
except MemoryError:
# the thing we wanted to test
Esto requiere una pequeña adición a su diseño.
class AnotherClass(object):
def __init__(self, *args, **kw):
blah blah blah
def makeAnotherClass(*args, **kw):
return AnotherClass(*args, **kw)
La función extra, en el largo plazo, demuestra ser un buen patrón de diseño. Es una fábrica , y a menudo necesita algo como eso.
Puede reemplazar este makeAnotherClass
con algo como esto.
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)
Esta versión se lanzará una excepción sin que tenga que limitar la memoria de ninguna manera oscura, insoportable, complejo o mágico.
Gracias! Exactamente lo que necesitaba. –