Non perdere altro tempo.
Invece, se si desidera giocare con le eccezioni MemoryError
creare un disegno che isola la costruzione dell'oggetto in modo da poterlo testare.
Invece di questo
for i in range(1000000000000000000000):
try:
y = AnotherClass()
except MemoryError:
# the thing we wanted to test
considerare questo.
for i in range(1000000000000000000000):
try:
y = makeAnotherClass()
except MemoryError:
# the thing we wanted to test
Ciò richiede una piccola aggiunta al progetto.
class AnotherClass(object):
def __init__(self, *args, **kw):
blah blah blah
def makeAnotherClass(*args, **kw):
return AnotherClass(*args, **kw)
La funzione extra, a lungo termine, si rivela un buon modello di progettazione. È una Factory, e spesso hai bisogno di qualcosa di simile.
È quindi possibile sostituire questo makeAnotherClass
con qualcosa di simile.
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)
Questa versione solleverà un'eccezione senza dover limitare la memoria in qualche modo oscuro, insopportabile, complessa o magico.
fonte
2009-11-19 00:18:38
Grazie! Esattamente quello di cui avevo bisogno. –