Найти тему
SCIENCE IT

Celui pickle-Modul

https://as1.ftcdn.net/jpg/00/94/04/38/500_F_94043874_r4gaee4CkxF4AvuCQWhkJGvB1tYNOM25.jpg
https://as1.ftcdn.net/jpg/00/94/04/38/500_F_94043874_r4gaee4CkxF4AvuCQWhkJGvB1tYNOM25.jpg

Les chaînes de caractères peuvent être facilement écrites et lues à partir d'un fichier. Les nombres sont un peu plus compliqués car la méthode read() ne retourne que des chaînes de caractères. Ceux-ci doivent être passés à une fonction comme int() qui prend une chaîne comme'123' et retourne sa valeur numérique 123. Toutefois, si vous souhaitez stocker des types de données plus complexes tels que des listes, des dictionnaires ou des instances de classe, le problème devient beaucoup plus complexe.

Au lieu de demander aux utilisateurs d'écrire et de déboguer du code pour stocker des types de données plus complexes, Python propose un module standard appelé pickle. C'est un module fantastique qui peut prendre presque n'importe quel objet Python (même certaines formes de code Python !) et le convertir en une représentation de chaîne ; ce processus s'appelle le décapage. Reconstruire l'objet à partir de la représentation de la chaîne s'appelle le décapage. Entre le décapage et le décapage, la représentation de la chaîne peut être stockée dans des données ou des fichiers ou envoyée sur le réseau à une machine distante.

Si vous avez un objet x et un objet f qui a été ouvert pour l'écriture, la façon la plus simple de choisir l'objet est de choisir une seule ligne de code :

pickle.dump(x, f)

Pour décompresser à nouveau l'objet, il suffit que f soit un objet fichier qui a été ouvert en lecture :

x = charge décapée (f)

(Il y a aussi d'autres variantes qui sont utilisées lors de la sélection de plusieurs objets ou si vous ne voulez pas collecter de données dans un fichier ; voir pickle dans la référence de la bibliothèque Python).

Pickle est le moyen normal de créer un objet Python qui peut être sauvegardé et réutilisé par d'autres programmes ou par le même programme ; le terme technique pour une telle chose est un objet persistant. En raison de l'utilisation extensive de pickle, de nombreux programmeurs qui écrivent des extensions Python s'assurent que les nouveaux types de données, tels que les matrices, peuvent être correctement sélectionnés et décapés.

Erreurs et exceptions

Jusqu'à présent, les messages d'erreur n'ont été mentionnés qu'en passant, mais si vous avez essayé les exemples, vous en avez certainement vu quelques-uns. Il existe (au moins) deux types d'erreurs : les erreurs de syntaxe et les exceptions.

Erreurs de syntaxe

Les erreurs de syntaxe, aussi appelées erreurs d'analyseur, sont peut-être les messages d'erreur les plus courants que vous obtenez en apprenant Python :

>>>>> tout en imprimant vrai ('Hello World')
Fichier "<stdin>", ligne 1, dans ?
alors que l'impression réelle ('Hello World')
^
SyntaxError : syntaxe invalide

L'analyseur répète la ligne gênante et pointe avec une petite "flèche" vers le point où l'erreur a été détectée. L'erreur s'est produite (ou du moins a été détectée) sur le jeton devant la flèche : Dans l'exemple, l'erreur dans la fonction print() a été découverte car les deux points (':':':':') avant la fonction manquent. De plus, le nom du fichier et le numéro de ligne sont édités, vous savez donc où chercher si l'entrée provient d'un script.

Exceptions

Même si une phrase ou une expression est syntaxiquement correcte, des erreurs peuvent se produire pendant son exécution. Les erreurs qui se produisent pendant l'exécution sont appelées exceptions et ne sont pas nécessairement graves : vous apprendrez bientôt comment les traiter dans les programmes Python. Cependant, la plupart des exceptions ne sont pas gérées par les programmes et génèrent des messages d'erreur, comme le montre cet exemple :

>>> 10 * (1/0)
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 1, dans ?
ZeroDivisionError : division interne ou module pour zéro
>>>>> 4 + spam*3
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 1, dans ?
NameError : le nom'spam' n'est pas défini
>>> '2' + 2
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 1, dans ?

TypeError : Impossible de convertir un objet'int' en str implicitement

La dernière ligne du message d'erreur indique ce qui s'est passé. Il existe plusieurs types d'exceptions et le type d'exception est affiché dans le message : les types dans cet exemple sont ZeroDivisionError, NameError et TypeError. La sortie de la chaîne en tant que type d'exception est le nom de l'exception incorporée qui s'est produite. Ceci s'applique à toutes les exceptions incorporées, mais ne devrait pas être appliqué aux exceptions personnalisées (mais est une convention utile).

Le reste de la ligne spécifie les détails en fonction du type d'exception et de ce qui a déclenché l'exception.

La partie précédente du message d'erreur montre le contexte dans lequel l'exception s'est produite, sous la forme d'enquêtes de retraçage. En général, le déroulement du programme y est répertorié à l'aide des lignes correspondantes du code source ; toutefois, aucune ligne lue à partir de l'entrée standard n'est éditée.

Built-in Exceptions liste toutes les exceptions intégrées et leur signification.

https://as2.ftcdn.net/jpg/02/87/95/83/500_F_287958394_pLKduhFTCZoWJQpM8u18El8IIZT9oc7T.jpg
https://as2.ftcdn.net/jpg/02/87/95/83/500_F_287958394_pLKduhFTCZoWJQpM8u18El8IIZT9oc7T.jpg