MemoryError

Python Erreur courante

Explication

L'erreur `MemoryError` survient quand le programme tente d'allouer **plus de mémoire (RAM) que disponible**. C'est typiquement le cas en chargeant un énorme fichier ou une immense liste entièrement en mémoire, ou lors d'une croissance non bornée. ```python donnees = [0] * (10**10) # des milliards d'éléments # MemoryError ```

Causes courantes

- **Chargement complet** d'un fichier ou d'un CSV gigantesque en mémoire. - **Liste / dictionnaire** qui grossit sans limite (boucle, accumulation). - **Grandes matrices** ou structures dupliquées. - **Fuite de mémoire** : des références conservées empêchent la libération.

1. Traitez en flux (streaming), ligne par ligne

with open("enorme.txt", encoding="utf-8") as f:
    for ligne in f:          # ne charge qu'une ligne à la fois
        traiter(ligne)

2. Traitez par morceaux (pandas)

import pandas as pd
for bloc in pd.read_csv("enorme.csv", chunksize=100_000):
    traiter(bloc)

3. Utilisez des générateurs au lieu de listes

carres = (x * x for x in range(10**8))   # paresseux, pas de liste géante
total = sum(carres)

4. Choisissez des types efficaces

Pour de gros tableaux numériques, numpy (ou array) consomme bien moins que des listes Python. Pensez aussi au Python 64 bits.

Comment prevenir cette erreur

- **Ne chargez jamais** un fichier volumineux entièrement : itérez ou découpez. - **Préférez les générateurs** aux listes pour les grands volumes. - **Surveillez la croissance** des structures dans les boucles longues. - Référence : [docs.python.org — MemoryError](https://docs.python.org/fr/3/library/exceptions.html#MemoryError).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Comment lire un fichier de plusieurs Go sans `MemoryError` ?
Itérez dessus ligne par ligne (`for ligne in fichier:`) ou par blocs (`pandas` avec `chunksize`). Ne faites jamais `f.read()` sur un fichier géant.
Une liste en compréhension consomme-t-elle plus qu'un générateur ?
Oui : `[x for x in ...]` construit toute la liste en mémoire, alors que `(x for x in ...)` produit les éléments à la demande. Pour de gros volumes, le générateur évite le `MemoryError`.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.