Не тратьте время на это.
Вместо этого, если вы хотите поиграть с исключениями MemoryError
, создайте дизайн, который изолирует конструкцию объекта, чтобы вы могли проверить его.
Вместо этого
for i in range(1000000000000000000000):
try:
y = AnotherClass()
except MemoryError:
# the thing we wanted to test
Учтите это.
for i in range(1000000000000000000000):
try:
y = makeAnotherClass()
except MemoryError:
# the thing we wanted to test
Это требует одного крошечного дополнения к вашему дизайну.
class AnotherClass( object ):
def __init__( self, *args, **kw ):
blah blah blah
def makeAnotherClass( *args, **kw ):
return AnotherClass( *args, **kw )
Дополнительная функция - в долгосрочной перспективе - оказывается хорошим шаблоном дизайна. Это Factory , и вам часто нужно что-то подобное.
Затем вы можете заменить makeAnotherClass
на что-то вроде этого.
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 )
Эта версия создаст исключение без необходимости ограничивать память каким-либо неясным, неподдерживаемым, сложным или магическим способом.