Skip to content

Commit e10f34e

Browse files
committed
add raw-strings that are kind-of mandatory since 3.12
1 parent 012e0bb commit e10f34e

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

notebooks/2-3-sequences-str-nb.md

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -486,42 +486,48 @@ print(s)
486486

487487
+++ {"tags": ["gridwidth-1-2"]}
488488

489-
voici un problème commun, surtout sous Windows:
490-
491-
```{code-cell} ipython3
492-
:tags: [gridwidth-1-2]
489+
voici un problème commun, surtout sous Windows:
490+
on aurait envie d'écrire
493491

492+
```python
494493
s = 'C:\Temp\test.txt'
495-
print(s)
496494
```
497495

498-
+++ {"cell_style": "center"}
499-
500-
* `\T` n’existe pas comme échappement; Python interprète correctement `\T`
501-
* mais `\t` est compris comme une tabulation !!
502-
503496
````{admonition} Python-3.12
504-
:class: note admonition-small
497+
:class: note admonition-smaller
505498
506-
il semble même qu'en 3.12, un `\T` dans une chaine provoque carrément une erreur de syntaxe - ce qui est sans doute mieux au sens où au moins on détecte l'erreur plus tôt...
507-
````
508-
509-
+++
499+
ceci était déjà faux avec les anciennes versions de Python
500+
à cause du `\t` qui est compris comme une tabulation
510501
511-
pour résoudre ce problème, on peut utiliser des double-backslash `\\`, mais ce n'est vraiment pas élégant
512-
la bonne solution consiste à utiliser une "raw string", dans laquelle les backslash ne sont *pas interprétés*
502+
ceci **ne fonctionne plus** avec les versions récentes de Python
503+
en effet depuis 3.12, un `\T` dans une chaine provoque carrément une erreur de syntaxe - ce qui est sans doute mieux au sens où au moins on détecte l'erreur plus tôt...
504+
````
513505

514506
```{code-cell} ipython3
515-
# pour créer une raw-string, simplement faire précéder le string d'un 'r'
516-
517-
s = r'C:\Temp\test1.bin'
507+
:tags: [gridwidth-1-2]
508+
# du coup on est amené à utiliser plutôt une raw-string
518509
510+
s = r'C:\Temp\test.txt'
519511
print(s)
520512
```
521513

522-
````{admonition} préférez le / pour les chemins de fichier
514+
+++
523515

524-
notez que le plus souvent, vous pouvez aussi bien utiliser un `/` au lieu d'un `\` dans les chemins de fichiers sous Windows, ce qui résoud tous les problèmes d'échappement
516+
en dehors des raw-strings, on utilise fréquemment des backslash pour échapper les caractères spéciaux
517+
518+
| séquence | signification |
519+
|----------:|:---------------|
520+
| `\n` | nouvelle ligne |
521+
| `\t` | tabulation |
522+
| `\r` | retour chariot|
523+
| `\\` | backslash |
524+
| `\'` | apostrophe |
525+
| `\"` | guillemet |
526+
527+
```{admonition} noms de fichiers et slash /
528+
:class: tip
529+
pour revenir aux noms de fichiers, sachez que vous pouvez **utiliser partout un slash (`/`)** dans les chemins de fichiers **même sous Windows**, Python se débrouillera pour le convertir en backslash (`\`) lorsque nécessaire
530+
c'est une pratique **courante** et **recommandée**, car ça résoud justement tous les problèmes d'échappement
525531
526532
les *raw-strings* restent une feature bien pratique dans d'autres contextes, notamment avec les expressions régulières, que nous n'avons pas pu utiliser comme exemple ici puisqu'on n'en a pas encore parlé..
527533
````

notebooks/3-3-assignments-nb.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ with open("../data/hamlet.txt") as feed:
313313
# exemple 2 : les regexps
314314
315315
import re
316-
pattern = "(\d+)(st|nd|rd|th) edition"
316+
pattern = r"(\d+)(st|nd|rd|th) edition"
317317
318318
with open("../data/hamlet.txt") as feed:
319319
for lineno, line in enumerate(feed, 1):

notebooks/7-2-regexps-nb.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,11 @@ def match_all(pattern, strings):
184184
"""
185185
# compute max space
186186
margin = max(len(x) for x in strings) + 2 # for the quotes
187-
187+
188188
for string in strings:
189189
string_repr = f"'{string}'"
190190
print(f"'{pattern}' ⇆ {string_repr:>{margin}} → ", end="")
191-
191+
192192
if not (match := re.match(pattern, string)):
193193
print("NO")
194194
elif not (match.start() == 0 and match.end() == len(string)):
@@ -526,13 +526,13 @@ définis en fonction de la configuration de l'OS en termes de langue
526526
```{code-cell} ipython3
527527
:tags: [gridwidth-1-2]
528528
529-
match_all('\w+', ['eFç0', 'été', ' ta98'])
529+
match_all(r'\w+', ['eFç0', 'été', ' ta98'])
530530
```
531531

532532
```{code-cell} ipython3
533533
:tags: [gridwidth-1-2]
534534
535-
match_all('\s?\w+', ['eFç0', 'été', ' ta98'])
535+
match_all(r'\s?\w+', ['eFç0', 'été', ' ta98'])
536536
```
537537

538538
+++ {"slideshow": {"slide_type": ""}}

0 commit comments

Comments
 (0)