Session du 29 avril 2025 à 21h00
Data Science & IA
Qualité & Architecture
Algorithmique & Performance
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Comprendre et créer des context managers
Introduction pratique aux context managers Python à partir de l’exemple classique d’ouverture de fichiers, puis mise en place pas à pas de ses propres context managers.
00:00:00 :Ok c'est parti. Donc ce soir, notamment à la demande d'Arsène, on va attaquer les contextesmanagers. Alors, est-ce que tout le monde sait ce qu'est un contexte manager déjà pour
00:00:14 :commencer ? Pas du tout. Pas du tout ? Johanna ? Non plus. Ok. Bon, on va déjà commencerpar ça, parce qu'il y en a un que vous avez très probablement vu, voire utilisé. Alors,
00:00:30 :je vais vous partager mon écran. Voilà. Ok. Alors, je vais agrandir un petit peu le texteparce que à mon avis ça va être un peu petit. Voilà. Comme ça je pense que ça ne va pas
00:00:44 :être mal. Alors, je vais vous montrer un contexte manager que vous avez très probablement utilisé,c'est celui-là. Alors, on va faire un petit write pour commencer. Donc, as F. Ok. F.write.crack.
00:01:17 :Bonjour. Ok. Donc ça, c'est un contexte manager. Vous le voyez souvent, vous le voyez au coursdes différentes formations. Il m'embête évitablement. On va faire abstraction. Donc,
00:01:39 :ça c'est typiquement un contexte manager. Alors, celui-là vous le connaissez, vous l'avezcertainement vu à plusieurs reprises. Le but de ce contexte manager, c'est tout simplement
00:01:50 :d'ouvrir un fichier, de faire des manipulations. Donc là, typiquement, on va écrire un texte dansle fichier. Et l'intérêt de ce contexte manager, on vous le présente souvent en opposition à ça,
00:02:02 :c'est l'ouverture du fichier avec, je vais l'appeler comme ça parce que j'aime pas tropquand c'est nommé en rouge. Voilà. F2Write, on va dire égal open texte. On va mettre en
00:02:19 :W aussi. Ok. F2Write, bonjour. Et là, comme dans ce contexte-là, il faut que je ferme mon fichier,sinon je pourrais me retrouver avec une erreur si je dois vouloir remanipuler le fichier par la suite.
00:02:31 :Le contexte manager, lui, il va me permettre justement d'ouvrir le fichier, de faire mesmanipulations, et il va se charger tout seul de fermer le fichier. J'ai pas besoin de m'embêter
00:02:43 :à fermer le fichier. Donc c'est souvent dans ce contexte-là que ça vous est présenté au coursde la formation Python. C'est-à-dire qu'on vous présente le withOpenAsF pour ouvrir les fichiers
00:02:53 :ou manipuler les fichiers. C'est-à-dire que vous n'avez plus à penser à systématiquement fermerle fichier. Et comme ça, vous évitez les sources d'erreurs par la suite. Maintenant, ça c'est le
00:03:05 :contexte manager de la fonction open. C'est-à-dire qu'en fait, ce principe-là, vous pourriez le faireavec d'autres applications. On va voir un petit peu ce soir comment on pourrait faire justement
00:03:17 :pour créer nos propres contextes managers. Alors, par souci de simplicité, je vais rester sur,pour vous montrer des choses, on va rester sur la manipulation de fichiers. On va pas aller se
00:03:29 :hasarder dans d'autres fonctionnalités, d'autres types de fonctions où il faudrait peut-être réglercertains détails pour que ça marche avec le contexte manager. Là, l'idée, c'est que vous comprenez
00:03:37 :bien comment ça fonctionne et comment vous pourriez créer vos propres contextes managers. Est-ce quelà, c'est bon pour tout le monde ? Oui, c'est bon. C'est bon, on se demande pourquoi ça s'appelle
00:03:51 :contexte manager. On va y arriver, justement. Alors, pour que vous compreniez le contexte manager,je vais vous expliquer un petit peu comment il fonctionne en réel. Pour cela, je vais vous
00:04:05 :réécrire une fonction qui va faire exactement la même chose que ce qu'on faisait là avec lecontexte manager, mais je vais l'écrire un petit peu différemment pour que vous compreniez le trucet puis peut-être rafraîchir votre mémoire sur une certaine astuce. Donc, on va se créer une
00:04:23 :fonction Excel fichier. On va être très inventif comme tous les soirs. Donc, il nous faut un fichier.Ça, je suis d'accord pour ce genre de variable. Et un mode. On va rester dans le cadre de notre
00:04:46 :contexte manager, d'accord ? Pour mon fichier, il va falloir que je fasse ma variable fileToWritecomme j'ai fait tout à l'heure à la main. Je vais la mettre à open. Jusque là, si je mets mon
00:05:11 :fileToWrite avec un open et ainsi de suite, que le fichier existe ou n'existe pas, je ne vais pasavoir forcément d'erreur, d'accord ? Là où je vais souvent retrouver une erreur, c'est au moment
00:05:20 :d'écrire sur mon fichier. Donc, qu'est-ce que je vais faire ? Comment on va gérer ça si on veutessayer de faire une action en se disant il y a probablement un risque d'erreur, mais je veuxgérer cette erreur. Est-ce que vous vous souvenez comment on fait ? Non personne ? Quelle est la
00:05:48 :question ? Alors, si quand je dois, je veux programmer une action dans mon script, je saisque peut-être il y aura une erreur, possiblement une erreur dans mon action, mais je veux gérercette action, cette erreur. Qu'est-ce que je vais utiliser en disant ? On va faire les exceptions,
00:06:10 :on va créer les exceptions. Voilà, un try-except, ok. Donc, pour écrire dans mon fichier, je continue,je vais faire un try-except, juste un except simple où je vais par exemple envoyer erreurd'écriture, ça me va très bien. Et là, on a géré jusque là, on a commencé à gérer comme ce que fait
00:06:50 :notre texte manager, c'est-à-dire qu'on va ouvrir le fichier, on va l'ouvrir en mode écriture en fonctionde ce qu'on aura choisi, et on va essayer d'écrire dans le fichier s'il existe. S'il n'existe pas,
00:07:03 :on renvoie une info, attention, erreur d'écriture dans le fichier. Maintenant, on n'a toujours pasfermé notre fichier, et pour faire ça, qu'est-ce qu'on va faire ? On va utiliser un troisième mot-clé
00:07:16 :du couple try-except, qui est finally. Alors est-ce que vous aviez déjà vu le finally dans try-except ?Non, pas encore. Voilà, Pascal a donné la bonne réponse effectivement. Lorsque vous avez un try-except,
00:07:38 :lorsque vous mettez finally, quoi qu'il soit passé, qu'il y ait eu ou pas une exception delevée, les instructions que vous allez mettre après finally vont forcément s'appliquer. Donc là,
00:07:51 :techniquement, je mets mon find-to-write. Et on est bien revenu dans le cadre de ce que faitnotre context-manager. Donc j'ai recréé une fonction qui va me permettre d'ouvrir le fichier.
00:08:12 :Si le fichier existe, je vais pouvoir écrire dedans, ou je vais le créer dans le cas d'un write,ça sera avec le mot d'appel, s'il n'y avait pas de fichier, ça n'a pas eu grand problème. Et en
00:08:21 :tout état de cause, mon fichier va bien être fermé. Donc on est bien d'accord, on est bien revenu à lamême situation que ce qu'on avait avec le context-manager. On a ouvert notre fichier,
00:08:31 :on a essayé de l'écrire, et en tout état de cause, quoi qu'il se passe, on ferme notre fichier.Mais là, pour l'instant, on n'a pas encore réellement créé un context-manager. Là,
00:08:43 :c'était juste une fonction pour vous montrer que vous redécortiquez le concept et que vouscompreniez un petit peu comment marchent les choses. Donc on va commenter tout ça pour
00:08:52 :l'instant. Ça ne va pas nous servir dans les médias, mais ça nous servira tout à l'heure.Voilà. Et maintenant, je vais vous montrer comment on crée réellement un context-manager. Alors,
00:09:02 :il y a deux manières de créer un context-manager. Toi, une classe, d'accord ? Toi, une fonction avecun décorateur. On va d'abord voir la classe. Ce n'est probablement pas la solution que vous
00:09:15 :retiendrez parce qu'elle est un petit peu plus complexe, mais on va dire que c'est quand mêmeune solution qui est à connaître. Alors, hop, je vais basculer ça tout l'instant ici. Alors,
00:09:32 :je peux plus faire ça. Voilà. OK. Alors, pour faire avec une classe, comment on va faire ? Onva d'abord commencer par créer une classe qu'on va appeler… Ah, hop là, ça arrive. Voilà.
00:09:51 :Bonjour.Bonjour. Donc, on va d'abord créer une classe. On va l'appeler comme on l'a fait sur l'instruction,écrire fichier. On va rester là-dessus. OK. Il va falloir qu'on crée absolument trois choses
00:10:06 :dedans. Alors, hop là. Encore une fois, je doute qu'elle se trompe presque. Voilà. Alors,d'abord, on va faire notre défini. Ça, pas de souci. Hop, je supprime tout ça. Voilà. Donc là,
00:10:20 :qu'est-ce qu'on a fait ? On a simplement récupéré dans nos variables le nom de fichier et le modequ'on a choisi d'écriture. On va rentrer dans une variable de la classe le nom de fichier,
00:10:32 :dans une variable le mode, et on va se créer une variable file, OK, qui va gérer l'ouverture dufichier. D'accord ? Hop là. Donc, jusque là, rien de bien sorti. Là où il va falloir recréer deux
00:10:53 :fonctions obligatoires. La première fonction, c'est la fonction enter. OK. Cette fonction,qu'est-ce qu'elle va faire ? Tout simplement, elle va nous retourner le fichier qu'on a créé
00:11:05 :avec ce file. OK. Donc, rien de bien compliqué. Après, attention, on peut aller un peu plus loin.On peut faire d'autres modifications sur le fichier, et ainsi de suite. Là, ce soir,
00:11:14 :comme je vous ai dit, on va rester simple, vraiment pour vous montrer, reproduire lefonctionnement du contexte manager qu'on utilise avec les fichiers, avec le withOpen. L'idée,
00:11:25 :c'est que vous compreniez bien la mécanique qu'il y a derrière. Après, derrière, on est sur de laclasse, on est sur du Python, on est sur de la fonction, on peut vraiment imaginer un petitpeu tout ce qu'on veut, et faire ce qui nous plaît au niveau de notre action. La deuxième
00:11:40 :fonction qui va être obligatoire, c'est le exit. Alors, le exit, comme vous voyez, il y a plusieursvaleurs qu'on va mettre par défaut. Le xType, le xValue, ça va nous retourner le type de l'objet
00:11:55 :et les valeurs des variables. Et le xTraceValue, c'est pour récupérer les erreurs. OK. Et qu'est-cequ'on va mettre dans ce exit ? Eh bien, tout simplement, on va rajouter notre fameux file.close.
00:12:11 :OK. Donc, vous voyez, rien de... Hop, si je mets pas le self, ça va pas le faire. Donc, vous voyez,jusque-là, rien de bien compliqué. On a effectivement, on a créé une classe qu'on
00:12:25 :va pouvoir utiliser dans un contexte manager. Maintenant, comment est-ce qu'on utilise cetteclasse ? C'est tout simple. On va réutiliser la même méthode, on est sur notre withAs. Alors,
00:12:36 :je vais vous mettre ça en commentaire pour que vous puissiez retenir un peu la formule. Toutsimplement, le with, c'est le mot clé. Ensuite, on va y passer la classe ou fonction qu'on veut
00:12:54 :utiliser, en passant les arguments nécessaires à chaque fois, en fonction de ce moment où on adéfini notre classe ou définie notre fonction. Et ensuite, on va mettre As, et on va lui donner
00:13:06 :un nom de variable. C'est aussi simple que ça pour utiliser en fait un contexte manager qu'onaurait pu créer par soi-même. OK ? Donc, techniquement, si je reprends, quand je fais
00:13:17 :mon withOpen, on va supprimer tout ça parce que c'est pas ce qui nous intéresse. On voit bien,on se trouve bien le schéma que je viens de vous donner. Open avec ces variables test.txt et w,
00:13:41 :ça correspond bien à ma classe ou à ma fonction que j'ai définie dans le cadre d'un contextemanager. Et styleToWrite, c'est bien la variable que je vais utiliser pour manipuler mon objet.
00:13:51 :Est-ce que c'est bon pour tout le monde ? Oui, c'est bon. Sauf que là, dans la classe,en fait, il n'y a pas des attributs pour écrire dans le fichier. On va y venir juste après.
00:14:14 :En fait, la classe que j'ai créée, c'est un fichier, je l'ai mal nommé effectivement. En fait,son seul but, c'est de m'ouvrir le fichier et de gérer les manipulations du fichier.
00:14:37 :Enfin, ce qui va me permettre de créer un objet de type fichier manipulable. C'est pas exactementle nom, mais on va appeler ça comme ça par simplicité. Son but, c'est vraiment de créer un
00:14:50 :objet fichier, comme tu le fais avec le file égale open. Sauf que ce que ça m'apporte en plus,donc notamment les fonctions magiques enter et exit, c'est de manipuler ce fichier,mais en même temps de gérer les erreurs et de m'assurer que quand j'ai fini mes manipulations,mon fichier va se fermer automatiquement. Ça me rejettera, il n'y aura pas d'erreurs par la
00:15:12 :suite si je dois remanipuler un nouveau fichier avec une autre partie de mon code.Donc on continue. On va reprendre du coup, on va vérifier que notre classe fonctionne. On va
00:15:25 :laisser comme ça. Fichier test. On va faire tout simplement un file to write. Bonjour,j'ai fait un fichier texte. Tout va bien. Et là, c'est le moment périlleux où on teste. On va
00:15:44 :voir ce que ça donne. Je lance, mon programme se déroule sans problème. Si je fais un ls,j'effectue donc bien mon fichier test. On va afficher le contenu de ce fichier. Effectivement,
00:16:02 :il nous a bien écrit ce qu'on avait marqué dans le code. Donc là, vous voyez, vous pouvezcréer du contexte manager pour un petit peu tout ce que vous voulez. Ça ne se résume pas
00:16:16 :simplement à la manipulation de fichiers, à l'exécution de fichiers. Vous pouvez vraimentcréer votre classe, définir dans le hanter ce qu'elle va faire. On pourrait imaginer que par
00:16:26 :exemple, vous lui donnez un nom de fichier, qu'automatiquement, ce fichier vous concatènezun nom de dossier bien particulier, parce que vous voulez que quand vous utilisez le contextemanager, le dossier, le fichier créé, il peut automatiquement passer dans tel dossier. Donc du
00:16:43 :coup, vous allez dans le hanter ici, par exemple, je ne sais pas, on va faire ça.Self-file égale, on va dire, slash, user, slash, alors là, je crois qu'il est,je vais faire un pwd pour qu'il se trouve, voilà. Alors, slash user, slash iteneras,
00:17:25 :slash, allez, on va mettre, est-ce que j'en ai un déjà? Non. Alors, on va faire mentora,slash, ok, plus self nom de fichier, on va supprimer ça, voilà. Et là, du coup, je vais
00:17:50 :faire un, je vais le mettre quand ça va, ce sera mieux. Et là, je vais faire mon self-file,open, self-file name, plus, avec le mode, et je retourne mon self-file, ok? Donc là,
00:18:10 :normalement, si je réexécute mon script, qu'est-ce qu'il va se passer? Alors, je vaiscréer le dossier mentora, parce que ça, par contre, ça va être un problème, parce que jen'ai pas utilisé du password, et ainsi de suite. Donc, hop, on va créer mon dossier mentora.
00:18:24 :Ok, pas de, des vues sur le truc. Je lance mon script, tout se passe bien, et si j'affiche lecontenu de mon dossier mentora, hop, je retrouve bien mon fichier texte. Et si j'affiche le
00:18:46 :contenu de mon dossier mentora, flash, texte, on retrouve bien la phrase qu'on a écrite. Donc,vous voyez, par exemple, c'est le genre de choses que vous pouviez faire pour créer votre proprecontexte manager et, par exemple, imposer que, quand vous créez un fichier avec ce contextemanager, bah, ça passe automatiquement dans tel dossier, par exemple. Après, bon, vous allez
00:19:10 :pouvoir faire ça aussi pour d'autres choses, mais là, c'est vraiment un exemple basique pourmontrer qu'en fait, vous pouvez, après, manipuler et aller beaucoup plus loin dans le contextemanager et pas simplement se contenter d'avoir quelque chose qui vous ouvre le fichier,vous écrivez dedans, et hop, c'est, on est sûr que, le seul avantage, c'est que le fichier est
00:19:27 :bien fermé. Ok ? Ouais, ok. Donc, ça, c'est la classe. D'accord ? Maintenant, je vous ai ditqu'on pouvait le faire avec une fonction. Alors, vous allez voir, avec la fonction,
00:19:39 :c'est un peu plus simple. Bon, je vais commenter ça. Hop, vous allez retrouver un petit peu de,un petit truc qu'on a vu avec les générateurs. Alors, tout d'abord, il va falloir que j'importe
00:19:53 :un module. Hop, je vais remonter mon fichier. Il va falloir que j'utilise, en fait, un décorateur.Donc, je vais pouvoir créer une fonction. Je vais vous montrer comment se présente un petit
00:20:01 :peu la fonction pour faire un contexte manager. Mais, il y a besoin d'un décorateur. Alors,ce décorateur, on va le récupérer dans la bibliothèque contexte libre. Ok ? Il s'appelle
00:20:21 :contexte manager. Ok ? Alors, je vais redescendre. C'est ma fonction ici. Alors, tout d'abord,je vais mettre mon décorateur. Et on va l'appeler écrire fichier. Comme ça,
00:20:34 :ça va nous permettre d'avoir accès. Hop, j'ai gardé mes variables. Voilà, ça,j'ai pas besoin. On va juste garder ça. Donc, on va faire exactement la même chose. Mon fichier,
00:20:53 :je vais concatener finem avec le nom de mon fichier. Je vais ouvrir le fichier avec lemode que j'ai choisi. Et là, aussi, au lieu de faire un return du fichier, je vais faire un yield,
00:21:06 :ce qui va permettre, en fait, de générer mon objet à la volée. Et dans un contexte de fonction,ce sera beaucoup plus simple. D'accord ? Avec une classe, je ferai un objet spécifique. Donc,
00:21:20 :je vais pouvoir le manipuler, le retourner comme un objet. Dans le cas d'une fonction,si je fais un return, le problème qu'il y a, c'est qu'avec un return, qu'est-ce qui va sepasser ? Qu'est-ce qui se passerait si je remplaçais mon yield ici par un return ? Vous
00:21:36 :avez une idée ? En fait, ça va couper l'exécution, on va passer au final. Voilà. Le return empêcherale finally de s'exécuter. D'accord ? Donc, en utilisant un yield qui va me faire un générateur,
00:21:55 :j'aurai quand même mon fichier qui sera renvoyé dans le contexte manager, mais une fois que j'auraifini, mon finally s'exécutera quand même. Et donc, ça va dire ce que j'attends, c'est-à-dire le
00:22:06 :fait que le fichier se ferme. OK ? OK. Et là, je vais vous montrer, je vais supprimer l'ancienfichier. Non, je vais faire plutôt ça. Voilà. On va modifier le texte. On verra ce qu'il se passe.
00:22:26 :Je lance. Toujours pas d'erreur. Est-ce que j'ai toujours mon fichier ? Alors, j'ai toujours monfichier texte. Pas de souci. On va afficher les contenus. Et là, attention, tadam, je suis un
00:22:47 :fichier texte depuis une fonction avec un décorateur. OK ? Donc, pour ce qui est des choses, on va direrelativement simple. Le contexte manager, le décorateur contexte manager sera largement
00:23:04 :suffisant. Vous voyez, là, on a fait une petite manipulation. Et finalement, dans le cadre d'unefonction avec un contexte manager, c'est suffisant, on n'a pas besoin d'aller plus loin. Si vous
00:23:16 :voulez créer un contexte manager un peu plus complexe, dans lequel plusieurs opérations vontse faire, là, il vaudra mieux revenir à la classe. Parce qu'effectivement, dans le Handler,
00:23:23 :vous allez pouvoir gérer plus de choses. Et on pourrait imaginer... Tiens, on va essayer de faireça. Je n'ai pas tout fait ça. Je vous tente la blague en live. En espérant que ça marche. Alors,
00:23:37 :on va commenter ça. On réactive notre classe. On pourrait imaginer, par exemple, le fait que jerajoute le dossier. Je pourrais faire un self, point, destination. OK. Plac. Tout court. Je reprends ça.
00:24:07 :OK. Et je pourrais avoir une autre fonction, une autre méthode ici. Destination self. Return,voilà mon dossier. On va supprimer le dossier ici. OK. Donc, là, mon dossier est bien vide. Je
00:24:41 :relance. Crac. J'ai bien mon dossier, mon fichier texte. Et si je l'affiche, le fichier s'est biencréé. Donc là, ce que j'ai fait, c'est que j'ai rajouté d'autres méthodes. Donc, si vous voulez
00:25:03 :utiliser votre contexte manager avec différentes méthodes, créer de la conditionnalité enfonction du monde du fichier. On peut imaginer un petit peu tout ce qu'on veut, finalement. Là,
00:25:15 :une classe sera beaucoup plus appropriée. Alors, c'est un petit peu plus embêtant à manipulerparce qu'il faut faire le enter, le exit, qui a des valeurs à retrouver. Bon, après, on les
00:25:24 :trouve assez facilement dans la doc. Mais tels que EXC type, EC value, Fastback, qui ne sont pasfaciles à retenir de texte. Il faut les rechercher plus ou moins à chaque fois. Donc, c'est un petit
00:25:35 :peu le plus complexe à créer. Mais par contre, vous pourrez aller beaucoup plus loin dans votrecontexte manager personnalisé. Est-ce que l'histoire du contexte manager vous semble
00:25:51 :maintenant un peu plus claire ? N'hésitez pas à poser des questions. Je suis peut-être allé unpetit peu vite sur quelques dossiers. Pour moi, ça a été beaucoup plus clair. Ce qui m'a
00:26:10 :importé le plus, c'était surtout l'écriture du contexte manager parce qu'on l'utilise trèssouvent, surtout quand on veut ouvrir des fichiers et tout ça. Et alors, je me disais,
00:26:24 :comment on crée si on l'utilise régulièrement ? Et donc, tu vois, tu peux aller beaucoup plusloin finalement. Parce que c'est vrai que dans toutes les formations Python, on va vous le
00:26:37 :présenter comme ça. On vous présente le contexte manager. Regardez, c'est Freeze Open,As, Est, vous utilisez votre fichier. Regardez, c'est magique. Vous n'avez plus besoin de clôturer
00:26:46 :votre fichier. Mais c'est vrai qu'on ne pense pas forcément vous expliquer un petit peu lamécanique qui se trouve derrière. Le problème, c'est que généralement, au moment où on vous
00:26:57 :présente le contexte manager avec Freeze Open pour les fichiers, dans la plupart des parcoursPython et pas uniquement sur les dossiers, à ce moment-là, vous n'avez pas encore vu lestry-excepts. Donc, si on commence à vouloir vous expliquer ce que fait le contexte manager derrière
00:27:15 :sans que vous ayez vu les try-excepts et qu'en plus, on vous explique que sur un try-except,il y a un finalis qui va vous permettre de faire une action quoi qu'il soit passé au niveau dutry-except, on vous embrouille, on vous perd. Mais là, en faire un soi-même, c'est simple.
00:27:34 :Il y aurait un autre cas d'utilisation du contexte manager ?Techniquement, par exemple, tu pourrais l'utiliser aussi avec une base de données. Tu pourrais te
00:27:52 :faire un contexte manager pour manipuler une base de données. Donc, tu pourrais créer un contextemanager. Donc là, par exemple, sur ton nom de fichier, ça pourrait être le nom de ta base de
00:28:03 :données. On n'aurait plus de mode, par exemple. J'essaie de me rappeler parce que les bases dedonnées, j'ai manipulé un peu mais pas trop. Donc, il faut que j'importe mon SQLite 3 de mémoire.
00:28:16 :SQLite 3, voilà. Alors, tu me mets au défi, Arcel, attention. Je vais créer mon connecteur. Donc,hop, SQLite 3.connect.hop. Au lieu de ça, on va mettre site.nom de fichier. Là, je n'ai pas d'un
00:28:53 :SPI. Maintenant, on va retourner tout simplement la connexion. Puisque j'ai créé mon curseur,donc voilà, je retourne ma connexion. Ok. Et voilà. On va prendre close. De même,
00:29:21 :moi, ça se passe comme ça. Alors, je me mets sur une destination qui ne sert à rien. On va la renommerSQLmanip. Grosse inspiration quand ce soit. Et je pourrais, très bien, en admettant qu'ici, ça
00:29:44 :soit une base de données. Voilà. Faire un with. Alors, je l'ai appelé SQLmanip. Voilà. Asconnector. Je n'ai pas de données. Je pourrais faire un connector.execute et select. Voilà.
00:30:26 :Et tu vois, le prompt test, par exemple. Là, dans cet exemple-là, je pourrais aller faire unerequête SQL sur ma base de données. Et une fois que la requête est faite, automatiquement, ça
00:30:44 :libère mon connecteur. Et du coup, je n'ai pas de problème de connexion multiple sur une base dedonnées SQL qui pourrait générer des problèmes. Donc, tu vois, un autre cas d'application du
00:30:57 :contexte manager. Ouais. En fait, ça va servir beaucoup le contexte manager quand vous allezvouloir faire des actions en Python et que ces actions imposent que vous réalisiez une commandeparticulière lorsque vous avez fini pour ne pas créer de problèmes d'accès à des ressources,globalement. Pas uniquement des fichiers, mais des ressources au sens global. Et bien,
00:31:23 :s'il y a une action que vous devez faire systématiquement après avoir fait les autresactions que vous vouliez faire sur la ressource, le contexte manager va vous permettre de répondreà ça. En plus, vous pouvez, comme on l'a vu là, par exemple, avec le fichier, utiliser un contexte
00:31:40 :manager pour quand vous créez un fichier, forcément les mettre dans tel dossier. Ou,par exemple, on pourrait imaginer des contextes managers aussi. On va rester aussi sur l'histoire
00:31:49 :des bases de données pour dire que quand vous utilisez tel contexte manager, forcément,vous manipulez telle table de la base de données. Après, je dirais que la limite, c'est plus ou
00:32:00 :moins votre imagination. C'est-à-dire que plus vous allez vouloir quelque chose de précis,vous créez des outils précis en fonction de ce que vous faites dans votre programme parce quevous avez diverses actions répétitives ou autres. Là, vous allez pouvoir créer les
00:32:15 :contextes managers qui correspondent et on est clairement sous le cadre d'une fonction quel'on crée, en fait. Sauf que cette fonction, elle a pour but d'accéder à une ressource et de la
00:32:29 :manipuler et de vous permettre de la manipuler par la suite. Est-ce que ça te semble plus clair,Arsène ? Oui, c'est beaucoup plus clair, d'ailleurs. Bon, tant mieux. Johanna, pas trop
00:32:44 :mal à la tête ? Non, c'est bon. Ça va, ça va. C'est un peu plus complexe comme notion,mais ça reste simple, finalement. Oui. C'est un peu plus avancé, mais ça reste simple. Il n'y a
00:32:59 :rien de compliqué. Le try finalize, tu l'as déjà vu ? Les ? Les try finalize. Non, non. Mais mêmeça, je n'avais pas vu, mais en gros, c'est des... Enfin, moi, je vois ça comme des sous-programmes,
00:33:13 :en fait. En fait, quand tu vas voir plus en détail, je vais essayer de te le résumer très,très, très, très simplement. C'est-à-dire qu'en fait, try, j'essaye de faire une action,
00:33:23 :ok ? Si ça échoue, je prévois le cas où ça échoue, donc je mets un except. Except, je vais lui dire,ben, tu fais ça parce que tu n'as pas réussi à faire l'action, plutôt que de renvoyer uneerreur dans la console, disons. Et là, le finally, c'est lui dire, ben, que c'est réussi ou échoué,
00:33:43 :tu réalises cette action. Ok. Voilà, c'est le système qui fait ça. Après, tu verras dans lecours, c'est expliqué plus en détail, plus en profondeur, mais l'idée principale est là.
00:33:55 :Ok, ça marche. Et pour toi, Pascal, c'est bon ? Oui, c'est bon. Tu crois qu'il y a des chosesdans le causal, là-dessus ? Non. Moi, je n'en ai jamais vu. Alors, peut-être, si je vous demandais
00:34:10 :d'utiliser un with-open dans un cadre X ou Y, d'accord ? Parce que c'est vrai qu'en Python,l'utilisation de with-open pour la manipulation suffit, je ne veux pas dire que c'est unepratique universelle, mais on n'est pas très, très loin. Parce qu'il y a très peu de programmeurs
00:34:28 :qui vont utiliser du code avec du file open, après file write, file read, enfin, toutes lesmanipulations qu'on pourrait faire sur un fichier, et rajouter le file close. Parce que, ben,
00:34:41 :tout simplement, ce fameux file close, on a un petit peu tendance à l'oublier, et du coup,on génère une erreur bêtement. Donc, beaucoup de programmeurs Python prédisent, ici, qu'habitude,
00:34:53 :quand ils doivent manipuler un fichier ou une ressource, ils utilisent le context-manager,le with-as, et c'est simple, on ne s'embête pas. Et comme ça, on n'a pas besoin de penser à
00:35:04 :refaire les fichiers. Mais tu n'auras pas de questions, je pense, enfin, je n'ai jamaisentendu parler jusque-là de questions, Posa, sur le cœur même de la machine, du context-manager.
00:35:15 :Après, objectivement, je ne suis pas sûr que vous en utiliserez très souvent,vous en ferez très souvent, des context-managers personnalisés. On reste sur quelque chose d'assez
00:35:27 :particulier, d'assez niche. Mais maintenant, c'est bien de voir ça et de comprendre ce quise passe derrière notre Squeeze Open, en fait. Surtout quand vous aurez des bugs, vous saurez
00:35:41 :un petit peu comment ça marche derrière, et ça vous permettra peut-être de débuguer un peuplus facilement. C'est bon pour tout le monde ? Oui, c'est bon. Impeccable. Avant qu'on se quitte,
00:36:02 :est-ce que vous avez éventuellement une petite question ou autre ? Passeulement sur le context-manager ? Vous auriez souhaité qu'on voit assez rapidement ? Non,
00:36:17 :c'est bon pour tout le monde ? Impeccable. Je vous dis à la semaine prochaine, du coup. Dansl'entretemps, n'hésitez pas à faire comme l'a fait Arcel. S'il y a des sujets que vous souhaitez
00:36:33 :voir la semaine prochaine ou dans les semaines à venir, n'hésitez pas à me contacter, à me suggérer.Moi j'aimerais bien qu'on voie telle ou telle notion, ou qu'on s'intéresse plus particulièrementà tel ou tel fonctionnement Python. Le but de ces mentorats est bien entendu de, une, vous
00:36:52 :faire progresser en Python et vous accompagner dans vos progressions dans le passage du Toza pourceux qui y sont engagés. Mais c'est surtout que ça vous soit profitable. Donc n'hésitez pas à être
00:37:05 :acteur et à proposer les sujets qui vous semblent assez prégnants. Et puis même pour ceux quiassistent à vos mentorats, qui ont éventuellement déjà vu ces notions-là, une petite révision çafait toujours du bien. C'est perdu pour personne. Donc voilà, j'ai fait mon petit libus sans
Aucune occurrence trouvée pour « ».