Đừng lãng phí thời gian cho việc này.
Thay vào đó, nếu bạn muốn chơi với MemoryError
ngoại lệ, hãy tạo một thiết kế tách biệt cấu trúc đối tượng để bạn có thể kiểm tra nó.
Thay vì điều này
for i in range(1000000000000000000000):
try:
y = AnotherClass()
except MemoryError:
# the thing we wanted to test
Xem xét việc này.
for i in range(1000000000000000000000):
try:
y = makeAnotherClass()
except MemoryError:
# the thing we wanted to test
Điều này đòi hỏi một sự bổ sung nhỏ cho thiết kế của bạn.
class AnotherClass(object):
def __init__(self, *args, **kw):
blah blah blah
def makeAnotherClass(*args, **kw):
return AnotherClass(*args, **kw)
Hàm bổ sung - về lâu dài - được chứng minh là mẫu thiết kế đẹp. Đó là Nhà máy và bạn thường cần một cái gì đó như thế.
Sau đó, bạn có thể thay thế makeAnotherClass
bằng một cái gì đó như thế này.
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)
Phiên bản này sẽ tăng ngoại lệ mà không phải giới hạn bộ nhớ theo bất kỳ cách tối nghĩa, không được hỗ trợ, phức tạp hoặc phép thuật nào.
Nguồn
2009-11-19 00:18:38
Cảm ơn bạn! Chính xác những gì tôi cần. –