Wrap in Try / Except dans Sublime Text


Très souvent il m’arrive de vouloir mettre un bout de mon code dans un blog try / except, et il faut couper le bloc de code, ecrire le try/except, coller le code, puis re-indenter au besoin.

C’est con, on a un éditeur pour faire le taff pour nous et d’ailleurs, PyDev le fait très bien. Soyons fainéant.

On va se rajouter une petit snippet qui permet de faire ça automatiquement. Il faut ouvrir le menu Tools > new snippet et un peu de xeumeuleu dedans :

<snippet>
<content><![CDATA[
${SELECTION/^( *)([^ ].*)/$1/g}try:
${SELECTION/(^ *|\n *)/$1    /g}
${SELECTION/^( *)([^ ].*)/$1/g}except ${1:Exception as e}:
    ${SELECTION/^( *)([^ ].*)/$1/g}${2:import ipdb; ipdb.set_trace()}
]]></content>
    <scope>source.python</scope>
    <description>Wrap in Try/Except</description>
</snippet>

Ca récupère la selection, place le try/except, replace la sélection et reindente grâce à une regex. Et seulement si le fichier est du code Python. Joie.

On sauvegarde ça sous un nom clair genre “wrap_in_try_except.sublime-snippet”.

Puis on fait un petit tour dans Préférence > Key Bindings – User et on se rajoute un raccourci clavier pour profiter de notre nouveau joujou :

      { "keys": ["ctrl+shift+y"], "command": "insert_snippet", "args": {"name": "Packages/User/wrap_in_try_except.sublime-snippet"} }

Et voilà :

ligne_qui_pouet

Devient, après selection et un petit ctrl + shift + y :

try:
    ligne_qui_pouet
except Exception as e:
    import ipdb; ipdb.set_trace()

On peut tabuler entre la définition de l’exception à catcher et le contenu du block except pour les changer au besoin rapidement.

Par contre, ça ne marche que si on indente avec des espaces. Mais ceux qui utilisent des tabs pour indenter ne méritent pas qu’on les aide de toute façon (si c’est votre cas, quittez ce site, tout de suite, houste !).

14 thoughts on “Wrap in Try / Except dans Sublime Text

  • Shagshag

    “Mais ceux qui utilisent des tabs pour indenter ne méritent pas qu’on les aide de toute façon”

    Malheureusement, suivant le projet sur lequel on travaille on ne choisi pas les standards de codage a utiliser.

    Au cas ou c’était pas clair, actuellement j’indente avec des tabs :p

  • killruana

    @sam: Il n’y aurait pas un en trop dans ton xeumeuleu ?

    @clem: Conventions de codage Python. Voir PEP8.

  • killruana

    * Il n’y aurait pas un <snippet> en trop dans ton xeumeuleu ?

  • foxmask

    la tof d’illustration est tout le contraire d’un faineant :) le pov’ mec :D

  • Feadurn

    Et une question pour les utilisateurs de vim, y-a-t-il un moyen de faire pareil sous vim?

    Cette question n’est pas un appel à troll, c’est juste que j’utilise pour le moment les deux éditeurs et que je tente d’apprendre à utiliser vim et j’aime bien savoir si c’est possible de faire pareil pour les deux. J’essaie de me forcer un peu plus avec vim, parce que c’est open source et que je commence a maitriser un peu le machin (mais pas facile a apprivoiser). Et du coup, si les commentaires peuvent donner un tip pour vim, c’est tout benef.

    PS: Excellent le trombone MS :D

  • Sam Post author

    @clem: c’est juste un troll :) Je garde la flamme du blog en vie. Oui le PEP8 s’applique uniquement au Python, c’est la convention de codage internationale du langage. Après il y a des gens qui ne la suivent pas. On les agresse dans les ruelles sombres, mais c’est possible.

    @killruana : merci man.

    @foxmask: oui mais il try et il wrap.

    @Feadurn: on a le droit de parler de VI, c’est pas un crime. Juste de pas lancer l’éternel débat “Vi il est plus mieux”, parce que ça commence à devenir vieux. Moi je tenterai avec une macro pour résoudre ton problème (http://www.thegeekstuff.com/2009/01/vi-and-vim-macro-tutorial-how-to-record-and-play/)

  • joshuafr

    un bout de monde code dans un blog ==> un bout de mon code dans un bloc

  • Romain

    @Feadurn et @Sam : dans vim, on peut le faire avec un peu d’huile de coude, une ligne de code bien crade et un vnoremap !
    J’ai jamais tenté ceci dit (flemme).

  • Sam Post author

    Je ne suis pas sur que ça marche avec toutes les formes d’indentation.

  • Pierrocana

    Chez moi pour rajouter le snippet il faut faire: Tools > Developer > New Snippet .

    Merci pour votre super site.

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.