tôi không ủng hộ rằng điều này sẽ không bao giờ là một ý tưởng tốt, nhưng tôi đã phát hiện ra rằng bạn có thể sụp đổ Python (2,7 và 3,2 kiểm tra) bằng cách chạy eval
trên một chuỗi đầu vào đủ lớn:Tại sao có giới hạn độ dài cho python's eval?
def kill_python(N):
S = '+'.join((str(n) for n in xrange(N)))
return eval(S)
On máy tính của tôi S
có thể được tạo tốt, nhưng đối với các giá trị khoảng N>74900
, Python sẽ không thành công với Segmentation fault (core dumped)
. Có giới hạn về độ dài của chuỗi (hoặc phân tích cây) mà trình thông dịch có thể xử lý không?
Note: Tôi không cần để làm điều này, với tôi đây là một câu hỏi sâu hơn phản ánh sự thiếu hiểu biết của tôi về những gì diễn ra bên trong hộp. Tôi muốn hiểu lý do tại sao Python không ở đây, và vì vậy thảm khốc (tại sao không ném một ngoại lệ?)
IIRC, việc phân tách thông dịch viên Python được coi là lỗi trong mọi tình huống và không nên xảy ra - điều này có thể đáng giá [báo cáo lỗi] (http://bugs.python.org/). –
@Lattyware: Trong hầu hết các trường hợp, không phải tất cả. Nhưng cái này * nên * được coi là một lỗi. –
Thật thú vị, 'sum (xrange (75000))' dường như chỉ hoạt động tốt – inspectorG4dget