322
Programmation impérative en Python Cours 6. Exceptions et Fichiers Olivier Baldellon Courriel : pré[email protected] Page professionnelle : http://deptinfo.unice.fr/~obaldellon/ Licence 1 — Faculté des sciences de Nice — Université Cô te d’Azur

Programmation impérative en Python 3 — Cours 6. Exceptions

  • Upload
    others

  • View
    33

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmation impérative en Python 3 — Cours 6. Exceptions

Programmation impérative en PythonCours 6. Exceptions et Fichiers

Olivier Baldellon

Courriel : pré[email protected]

Page professionnelle : http://deptinfo.unice.fr/~obaldellon/

Licence 1 — Faculte des sciences de Nice— Universite Cote d’Azur

Page 2: Programmation impérative en Python 3 — Cours 6. Exceptions

Test sur Moodle cette semaine Annonces

▶ Petit test sur machine en début de TP

▶ Obligation de venir en TP dans le bon groupe

1/52

Page 3: Programmation impérative en Python 3 — Cours 6. Exceptions

Sommaire

F Partie i. Exceptions

F Partie ii. Lancer des exceptions

F Partie iii. Compléments sur les chaînes

F Partie iv. Systèmes de fichier

F Partie v. E/S : écrire dans un fichier

F Partie vi. E/S : lire dans un fichier

F Partie vii. Table des matières

2/52

Page 4: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>>

L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 5: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]

>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 6: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>>

L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 7: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]

Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 8: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>>

L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 9: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)

Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 10: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>>

2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 11: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0

Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 12: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 13: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 14: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions Partie i. Exceptions

▶ En cas d’erreur dans un programme, Python lève une exception.

>>> L = [6, 4, 7, 2, 1, 8]>>> L[6]Traceback (most recent call last):File "<console>", line 1, in <module>

IndexError: list index out of range>>> L.index(5)Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 5 is not in list>>> 2/0Traceback (most recent call last):File "<console>", line 1, in <module>

ZeroDivisionError: division by zero

shell

▶ Il faut lire en détail les messages erreurs !

▶ La cause de l’erreur y est souvent clairement indiquée.

3/52

Page 15: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>>

from toto import f # f définie dans le fichier toto.py>>> f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 16: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py

>>> f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 17: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py>>>

f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 18: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py>>> f(0)

Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 19: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py>>> f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 20: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py>>> f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)

▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 21: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py>>> f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x

▶ L’erreur est une division par zéro.

4/52

Page 22: Programmation impérative en Python 3 — Cours 6. Exceptions

Erreurs et trace d’exécution Partie i. Exceptions

1 def f(x):2 print("Début du calcul")3 a=g(x)4 print("Fin du calcul")5 return a+167 def g(x):8 return 3%x

scRipt

En cas d’erreur rencontrée :▶ le programme s’interrompt immédiatement▶ et affiche alors la trace d’exécution.

>>> from toto import f # f définie dans le fichier toto.py>>> f(0)Début du calculTraceback (most recent call last):File "<console>", line 1, in <module>File "./toto.py", line 3, in fa=g(x)File "./toto.py", line 8, in greturn 3%x

ZeroDivisionError: integer division or modulo by zero

shell

▶ Ligne 3 du fichier toto.py : f a rencontré une erreur : a=g(x)▶ Ligne 8 du fichier toto.py : g a rencontré une erreur : return 3%x▶ L’erreur est une division par zéro.

4/52

Page 23: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt

>>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt

>>> record2(9.0)True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 24: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>>

record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt

>>> record2(9.0)True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 25: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')

Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt

>>> record2(9.0)True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 26: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt

>>> record2(9.0)True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 27: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>>

record2(9.0)True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 28: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>> record2(9.0)

True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 29: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>> record2(9.0)True>>>

record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !

5/52

Page 30: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>> record2(9.0)True>>> record2(9)

False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !5/52

Page 31: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>> record2(9.0)True>>> record2(9)False>>>

type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !5/52

Page 32: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>> record2(9.0)True>>> record2(9)False>>> type(9) == float

False

shell

▶ Mais il est facile d’oublier des cas !5/52

Page 33: Programmation impérative en Python 3 — Cours 6. Exceptions

Éviter les exceptions Partie i. Exceptions

▶ Les exceptions peuvent être dues :▶ à une erreur de programmation.▶ à un utilisateur qui rentre de mauvaises valeurs.

def record(chrono):if chrono < 9.58:

return Trueelse:

return False

scRipt >>> record('9s')Traceback (most recent call last):File "<console>", line 1, in <module>File "./sprint.py", line 2, in recordif chrono < 9.58:

TypeError: '<' not supported betweeninstances of 'str' and 'float'

shell

▶ On peut vérifier le type :

def record2(chrono):if type(chrono) == float:

return chrono < 9.58else:

return False

scRipt >>> record2(9.0)True>>> record2(9)False>>> type(9) == floatFalse

shell

▶ Mais il est facile d’oublier des cas !5/52

Page 34: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,

▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 35: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd

▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 36: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 37: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 38: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 39: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 40: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :

▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 41: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception

▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 42: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except

▶ on passe alors à la suite du programme

6/52

Page 43: Programmation impérative en Python 3 — Cours 6. Exceptions

Rattraper les exceptions Partie i. Exceptions

▶ Pour éviter que notre programme se termine,▶ On peut éviter les exceptions : cela peut rendre le code complexe et lourd▶ On peut les rattraper pour les traiter proprement.

try:instruction # Bloc tryinstruction # Calcul qui peutinstruction # lever des exceptions

except:instruction # Bloc except : Exécuteinstruction # seulement si une exceptioninstruction # a été levée dans le Bloc 1

instruction # Suite du programme

scRipt

▶ Dans un bloc try, on lance un code qui peut lever une exception.

▶ Si aucune exception n’est levée, on passe à la suite du programme.

▶ Si une exception est levée dans le bloc try :▶ on interrompt le bloc try à partir de l’exception▶ on exécute le bloc except▶ on passe alors à la suite du programme

6/52

Page 44: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>>

record3(9.6)On essaie le calculTout c’est bien passé :)False>>> record3(9)On essaie le calculTout c’est bien passé :)True>>> record3('huit secondes et des poussières')On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 45: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>> record3(9.6)

On essaie le calculTout c’est bien passé :)False>>> record3(9)On essaie le calculTout c’est bien passé :)True>>> record3('huit secondes et des poussières')On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 46: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>> record3(9.6)On essaie le calculTout c’est bien passé :)False>>>

record3(9)On essaie le calculTout c’est bien passé :)True>>> record3('huit secondes et des poussières')On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 47: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>> record3(9.6)On essaie le calculTout c’est bien passé :)False>>> record3(9)

On essaie le calculTout c’est bien passé :)True>>> record3('huit secondes et des poussières')On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 48: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>> record3(9.6)On essaie le calculTout c’est bien passé :)False>>> record3(9)On essaie le calculTout c’est bien passé :)True>>>

record3('huit secondes et des poussières')On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 49: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>> record3(9.6)On essaie le calculTout c’est bien passé :)False>>> record3(9)On essaie le calculTout c’est bien passé :)True>>> record3('huit secondes et des poussières')

On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 50: Programmation impérative en Python 3 — Cours 6. Exceptions

Un premier exemple : la fonction record Partie i. Exceptions

def record3(chrono):try:

print('On essaie le calcul')résultat = (chrono < 9.58)print('Tout c’est bien passé :)')

except:print('Au secours une erreur !!!')résultat = False

return résultat

scRipt

▶ Si le test lève une exception, on considère que le record n’est pas battu.

>>> record3(9.6)On essaie le calculTout c’est bien passé :)False>>> record3(9)On essaie le calculTout c’est bien passé :)True>>> record3('huit secondes et des poussières')On essaie le calculAu secours une erreur !!!False

shell

7/52

Page 51: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.

▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')2>>> ['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 52: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')2>>> ['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 53: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>>

['a','b','c','b','c'].index('c')2>>> ['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 54: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')

2>>> ['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 55: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')2>>>

['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 56: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')2>>> ['a','b','c','b','c'].index('d')

Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 57: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')2>>> ['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 58: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction index Partie i. Exceptions

▶ On cherche à écrire une fonction recherche(x,S) :▶ qui renvoie l’indice x dans la séquence S.▶ qui renvoie -1 si l’élèment n’est pas dans S.▶ cf. cours 3 page 21 et cours 5 page 7.

▶ Il existe une méthode index, mais elle lève une exception en cas d’échec.

>>> ['a','b','c','b','c'].index('c')2>>> ['a','b','c','b','c'].index('d')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: 'd' is not in list

shell

▶ On va transformer cette « erreur » en -1 en capturant l’exception.

8/52

Page 59: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 60: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…

▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 61: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 62: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 63: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>>

L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 64: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)

>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 65: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>>

recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 66: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)

2>>> recherche(4,T)-1

shell

9/52

Page 67: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>>

recherche(4,T)-1

shell

9/52

Page 68: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)

-1

shell

9/52

Page 69: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : la fonction recherche Partie i. Exceptions

▶ On va utiliser la méthode index…

▶ … et lorsqu’elle lance une exception…▶ on la rattrape au vol !▶ et on renvoie -1

def recherche(x, L):try:

res = L.index(x)# Pas d'erreur ? On continue.return res

except:# Une erreur ? On exécute ce bloc.return -1

scRipt

▶ Et cela fonctionne avec les chaînes, les listes et les tuples.

>>> L=['a','b','c','b','c'] ; T=(1,2,3)>>> recherche('c',L)2>>> recherche(4,T)-1

shell

9/52

Page 70: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>> moyenne([]) #

return None : il ne se passe rien

>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 71: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>> moyenne([]) #

return None : il ne se passe rien

>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 72: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>>

moyenne([19,15,17])17.0>>> moyenne([]) #

return None : il ne se passe rien

>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 73: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])

17.0>>> moyenne([]) #

return None : il ne se passe rien

>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 74: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>>

moyenne([]) #

return None : il ne se passe rien

>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 75: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>> moyenne([]) #

return None : il ne se passe rien>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 76: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>> moyenne([]) # return None : il ne se passe rien>>>

moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 77: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>> moyenne([]) # return None : il ne se passe rien>>> moyenne(12)

Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 78: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : Calcul de la moyenne Partie i. Exceptions

▶ On veut calculer la moyenne d’une liste de note moyenne(L).

def moyenne(L):return sum(L) / len(L) # vous devez savoir écrire sum(…) !

scRipt

▶ Si la liste est vide, on renvoie None.▶ on va rattraper l’erreur de la division par zéro et seulement celle-ci

def moyenne(L):try:

return sum(L) / len(L)except ZeroDivisionError:

return None

scRipt

>>> moyenne([19,15,17])17.0>>> moyenne([]) # return None : il ne se passe rien>>> moyenne(12)Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 3, in moyenne

TypeError: 'int' object is not iterable

shell

10/52

Page 79: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()

True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell

>>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 80: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>>

'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell

>>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 81: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()

False>>> '6.55957'.isdigit()False

shell

>>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 82: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>>

'6.55957'.isdigit()False

shell

>>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 83: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()

False

shell

>>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 84: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>>

float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 85: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float

▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')

6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 86: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…

▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>>

float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 87: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…

▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')

Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 88: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt

>>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 89: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>>

est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 90: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>> est_nombre('1987')

True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 91: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>> est_nombre('1987')True>>>

est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 92: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>> est_nombre('1987')True>>> est_nombre('6.55957')

True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 93: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>> est_nombre('1987')True>>> est_nombre('6.55957')True>>>

est_nombre('MCMLXXXVII')False

shell

11/52

Page 94: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')

False

shell

11/52

Page 95: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : reconnaître un nombre dans une chaîne Partie i. Exceptions

▶ La méthode isdigit ne fonctionne qu’avec les entiers.

▶ Astuce : on essaie de convertir une chaîne avec float▶ si ça marche, c’est que c’était possible…▶ sinon, c’est visiblement autre chose qu’un nombre flottant !

>>> '1987'.isdigit()True>>> 'MCMLXXXVII'.isdigit()False>>> '6.55957'.isdigit()False

shell >>> float('6.55957')6.55957>>> float('MCMLXXXVII')Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: could not convert string tofloat: 'MCMLXXXVII'

shell

def est_nombre(s):try:

float(s)return True

except ValueError:return False

scRipt >>> est_nombre('1987')True>>> est_nombre('6.55957')True>>> est_nombre('MCMLXXXVII')False

shell

11/52

Page 96: Programmation impérative en Python 3 — Cours 6. Exceptions

Sommaire

F Partie i. Exceptions

F Partie ii. Lancer des exceptions

F Partie iii. Compléments sur les chaînes

F Partie iv. Systèmes de fichier

F Partie v. E/S : écrire dans un fichier

F Partie vi. E/S : lire dans un fichier

F Partie vii. Table des matières

12/52

Page 97: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !

▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt

>>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 98: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt

>>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 99: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt

>>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 100: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt

>>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 101: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt >>>

moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 102: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt >>> moyenne([])

Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 103: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt >>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 104: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt >>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.

▶ Message d’erreur un peu vague.

13/52

Page 105: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : assert Partie ii. Lancer des exceptions

▶ S’il y a trop peu d’erreurs dans votre code, vous pouvez en ajouter !▶ C’est une bonne pratique !▶ On ne cache pas d’erreurs mais on en informe l’utilisateur▶ Code plus court et lisible (on ne se préoccupe pas d’arguments non conformes)

▶ Conseil pour incarner la Zénitude !▶ L’explicite est mieux que l’implicite […]▶ Les erreurs ne doivent jamais être passées sous silence, sauf de manière explicite

▶ assert : vérifie une propriété et lève une erreur en cas de non-respect.

# assert# On impose L non videdef moyenne(L):

assert L != []return sum(L)/len(L)

scRipt >>> moyenne([])Traceback (most recent call last):File "<console>", line 1, in <module>File "<console>", line 2, in moyenne

AssertionError

shell

▶ Rapide à mettre en place▶ Permet d’être explicite sur ce qu’attend le programme.▶ Message d’erreur un peu vague.

13/52

Page 106: Programmation impérative en Python 3 — Cours 6. Exceptions

La Zénitude Partie ii. Lancer des exceptions

>>>

import thisThe Zen of Python, by Tim Peters

Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!

shell

14/52

Page 107: Programmation impérative en Python 3 — Cours 6. Exceptions

La Zénitude Partie ii. Lancer des exceptions

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!

shell

14/52

Page 108: Programmation impérative en Python 3 — Cours 6. Exceptions

La Zénitude Partie ii. Lancer des exceptions

>>> import thisThe Zen of Python, by Tim Peters

Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!

shell

14/52

Page 109: Programmation impérative en Python 3 — Cours 6. Exceptions

Tester son code avec assert Partie ii. Lancer des exceptions

def f(L):""" f(L) renvoie un couple (n,b)n est la taille de L, b vaut True si n est pair """pair=Truefor i in range(len(L)):

pair=not(pair)return (i+1,pair)

assert f([2,3,4]) == (3,False) # 3 éléments : impairassert f([2,3,4,6]) == (4,True) # 4 éléments : pairassert f([]) == (0,True) # 0 élément : pairprint(coucou)

scRipt

▶ Dans Thonny on appuie sur▶ si un test est valide, il ne se passe rien.▶ sinon il y a une exception

(ici l’erreur ne vient pas du assert)

Traceback (most recent call last):File "<console>", line 1, in <module>File "./tp6.py", line 9, in <module>assert f([]) == (0,True) # 0 élément : pairFile "./tp6.py", line 5, in freturn (i+1,pair)

UnboundLocalError: local variable 'i' referenced before assignment

shell

15/52

Page 110: Programmation impérative en Python 3 — Cours 6. Exceptions

Tester son code avec assert Partie ii. Lancer des exceptions

def f(L):""" f(L) renvoie un couple (n,b)n est la taille de L, b vaut True si n est pair """pair=Truefor i in range(len(L)):

pair=not(pair)return (i+1,pair)

assert f([2,3,4]) == (3,False) # 3 éléments : impairassert f([2,3,4,6]) == (4,True) # 4 éléments : pairassert f([]) == (0,True) # 0 élément : pairprint(coucou)

scRipt

▶ Dans Thonny on appuie sur▶ si un test est valide, il ne se passe rien.▶ sinon il y a une exception

(ici l’erreur ne vient pas du assert)

Traceback (most recent call last):File "<console>", line 1, in <module>File "./tp6.py", line 9, in <module>assert f([]) == (0,True) # 0 élément : pairFile "./tp6.py", line 5, in freturn (i+1,pair)

UnboundLocalError: local variable 'i' referenced before assignment

shell

15/52

Page 111: Programmation impérative en Python 3 — Cours 6. Exceptions

Tester son code avec assert Partie ii. Lancer des exceptions

def f(L):""" f(L) renvoie un couple (n,b)n est la taille de L, b vaut True si n est pair """pair=Truefor i in range(len(L)):

pair=not(pair)return (i+1,pair)

assert f([2,3,4]) == (3,False) # 3 éléments : impairassert f([2,3,4,6]) == (4,True) # 4 éléments : pairassert f([]) == (0,True) # 0 élément : pairprint(coucou)

scRipt

▶ Dans Thonny on appuie sur▶ si un test est valide, il ne se passe rien.▶ sinon il y a une exception

(ici l’erreur ne vient pas du assert)

Traceback (most recent call last):File "<console>", line 1, in <module>File "./tp6.py", line 9, in <module>assert f([]) == (0,True) # 0 élément : pairFile "./tp6.py", line 5, in freturn (i+1,pair)

UnboundLocalError: local variable 'i' referenced before assignment

shell

15/52

Page 112: Programmation impérative en Python 3 — Cours 6. Exceptions

Tester son code avec assert Partie ii. Lancer des exceptions

def f(L):""" f(L) renvoie un couple (n,b)n est la taille de L, b vaut True si n est pair """pair=Truefor i in range(len(L)):

pair=not(pair)return (i+1,pair)

assert f([2,3,4]) == (3,False) # 3 éléments : impairassert f([2,3,4,6]) == (4,True) # 4 éléments : pairassert f([]) == (0,True) # 0 élément : pairprint(coucou)

scRipt

▶ Dans Thonny on appuie sur▶ si un test est valide, il ne se passe rien.▶ sinon il y a une exception (ici l’erreur ne vient pas du assert)

Traceback (most recent call last):File "<console>", line 1, in <module>File "./tp6.py", line 9, in <module>assert f([]) == (0,True) # 0 élément : pairFile "./tp6.py", line 5, in freturn (i+1,pair)

UnboundLocalError: local variable 'i' referenced before assignment

shell

15/52

Page 113: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert

▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.▶ Permet de détecter les erreurs du développeur : utile pour les tests.▶ Mais messages peu clairs en production.▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 114: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.

▶ Permet de détecter les erreurs du développeur : utile pour les tests.▶ Mais messages peu clairs en production.▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 115: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.▶ Permet de détecter les erreurs du développeur : utile pour les tests.

▶ Mais messages peu clairs en production.▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 116: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.▶ Permet de détecter les erreurs du développeur : utile pour les tests.▶ Mais messages peu clairs en production.

▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 117: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.▶ Permet de détecter les erreurs du développeur : utile pour les tests.▶ Mais messages peu clairs en production.▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 118: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.▶ Permet de détecter les erreurs du développeur : utile pour les tests.▶ Mais messages peu clairs en production.▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError

▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 119: Programmation impérative en Python 3 — Cours 6. Exceptions

Lever une exception : raise Partie ii. Lancer des exceptions

▶ Méthode 1 : assert▶ Très pratique pour repérer les bogues qu’on ne devrait jamais rencontrer.▶ Permet de détecter les erreurs du développeur : utile pour les tests.▶ Mais messages peu clairs en production.▶ (même si on peut ajouter un message : assert test, "Message")

▶ Méthode 2 : raise▶ Permet de préciser le type d’erreur▶ par exemple : ValueError, IndexError, ZeroDivisionError▶ Permet d’ajouter un message clair et explicatif.

def moyenne(L):if L == []:

raise ValueError('Liste vide : non mais allo quoi !')else:

return sum(L) / len(L)

scRipt

16/52

Page 120: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>>

raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 121: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')

Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 122: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>>

raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 123: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")

File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 124: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>>

raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 125: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)

Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 126: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>>

raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 127: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))

Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 128: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 129: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.

▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 130: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions

… mais nous ne verrons pas comment.

17/52

Page 131: Programmation impérative en Python 3 — Cours 6. Exceptions

Jeu des sept erreurs Partie ii. Lancer des exceptions

>>> raise AssertionError('Il faut lire les consignes !!!')Traceback (most recent call last):File "<console>", line 1, in <module>

AssertionError: Il faut lire les consignes !!!

shell

>>> raise ZeroDivisionError("Moyenne d'une liste vide impossible")File "<console>", line 1raise ZeroDivisionError("Moyenne d'une liste vide impossible")

IndentationError: unexpected indent

shell

>>> raise ValueError('L argument doit être pair' + 1)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

shell

>>> raise IndexError("Je croyais la liste plus grande" + srt(1))Traceback (most recent call last):File "<console>", line 1, in <module>

NameError: name 'srt' is not defined

shell

▶ Vous pouvez utiliser ValueError et TypeError. Évitez les autres.▶ On peut créer ses propres exceptions… mais nous ne verrons pas comment.

17/52

Page 132: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions longue distance Partie ii. Lancer des exceptions

def f():# déclenche une exception mais ne la rattrape pas2/0print('Ce message ne sera pas affiché.')

def g():f() # déclenche une exceptionprint('Ce message non plus.')

def h():try:

g()print('Ce message ne sera toujours pas affiché')

except:print('Attrapée !')

h()

scRipt

▶ Dans cet exemple l’exception interrompt la fonction f(),

▶ mais aussi la fonction g() qui appelle la fonction f()

▶ on passe directement de la ligne 2/0 à la ligne print('Attrapée !')

18/52

Page 133: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions longue distance Partie ii. Lancer des exceptions

def f():# déclenche une exception mais ne la rattrape pas2/0print('Ce message ne sera pas affiché.')

def g():f() # déclenche une exceptionprint('Ce message non plus.')

def h():try:

g()print('Ce message ne sera toujours pas affiché')

except:print('Attrapée !')

h()

scRipt

▶ Dans cet exemple l’exception interrompt la fonction f(),

▶ mais aussi la fonction g() qui appelle la fonction f()

▶ on passe directement de la ligne 2/0 à la ligne print('Attrapée !')

18/52

Page 134: Programmation impérative en Python 3 — Cours 6. Exceptions

Exceptions longue distance Partie ii. Lancer des exceptions

def f():# déclenche une exception mais ne la rattrape pas2/0print('Ce message ne sera pas affiché.')

def g():f() # déclenche une exceptionprint('Ce message non plus.')

def h():try:

g()print('Ce message ne sera toujours pas affiché')

except:print('Attrapée !')

h()

scRipt

▶ Dans cet exemple l’exception interrompt la fonction f(),

▶ mais aussi la fonction g() qui appelle la fonction f()

▶ on passe directement de la ligne 2/0 à la ligne print('Attrapée !')

18/52

Page 135: Programmation impérative en Python 3 — Cours 6. Exceptions

Sommaire

F Partie i. Exceptions

F Partie ii. Lancer des exceptions

F Partie iii. Compléments sur les chaînes

F Partie iv. Systèmes de fichier

F Partie v. E/S : écrire dans un fichier

F Partie vi. E/S : lire dans un fichier

F Partie vii. Table des matières

19/52

Page 136: Programmation impérative en Python 3 — Cours 6. Exceptions

Chaînes de formatage Partie iii. Compléments sur les chaînes

▶ On veut afficher le résultat d’une division euclidienne avec (n,d)=(17,5)

17 = 3 × 5 + 2

▶ Version lourde : dur à modifier et à lire.

>>>

str(n)+' = '+str(n//d)+' × '+str(d)+' + '+str(n%d)'17 = 3 × 5 + 2'

shell

▶ Version plus lisible et plus aisément modifiable sur le long terme.

>>> f'{n} = {n//d} × {d} + {n%d}''17 = 3 × 5 + 2'

shell

L’ajout d’un f devant la chaîne permet d’utiliser des variables ou desexpressions entre accolades. On parle de f-string.

20/52

Page 137: Programmation impérative en Python 3 — Cours 6. Exceptions

Chaînes de formatage Partie iii. Compléments sur les chaînes

▶ On veut afficher le résultat d’une division euclidienne avec (n,d)=(17,5)

17 = 3 × 5 + 2

▶ Version lourde : dur à modifier et à lire.

>>> str(n)+' = '+str(n//d)+' × '+str(d)+' + '+str(n%d)

'17 = 3 × 5 + 2'

shell

▶ Version plus lisible et plus aisément modifiable sur le long terme.

>>> f'{n} = {n//d} × {d} + {n%d}''17 = 3 × 5 + 2'

shell

L’ajout d’un f devant la chaîne permet d’utiliser des variables ou desexpressions entre accolades. On parle de f-string.

20/52

Page 138: Programmation impérative en Python 3 — Cours 6. Exceptions

Chaînes de formatage Partie iii. Compléments sur les chaînes

▶ On veut afficher le résultat d’une division euclidienne avec (n,d)=(17,5)

17 = 3 × 5 + 2

▶ Version lourde : dur à modifier et à lire.

>>> str(n)+' = '+str(n//d)+' × '+str(d)+' + '+str(n%d)'17 = 3 × 5 + 2'

shell

▶ Version plus lisible et plus aisément modifiable sur le long terme.

>>>

f'{n} = {n//d} × {d} + {n%d}''17 = 3 × 5 + 2'

shell

L’ajout d’un f devant la chaîne permet d’utiliser des variables ou desexpressions entre accolades. On parle de f-string.

20/52

Page 139: Programmation impérative en Python 3 — Cours 6. Exceptions

Chaînes de formatage Partie iii. Compléments sur les chaînes

▶ On veut afficher le résultat d’une division euclidienne avec (n,d)=(17,5)

17 = 3 × 5 + 2

▶ Version lourde : dur à modifier et à lire.

>>> str(n)+' = '+str(n//d)+' × '+str(d)+' + '+str(n%d)'17 = 3 × 5 + 2'

shell

▶ Version plus lisible et plus aisément modifiable sur le long terme.

>>> f'{n} = {n//d} × {d} + {n%d}'

'17 = 3 × 5 + 2'

shell

L’ajout d’un f devant la chaîne permet d’utiliser des variables ou desexpressions entre accolades. On parle de f-string.

20/52

Page 140: Programmation impérative en Python 3 — Cours 6. Exceptions

Chaînes de formatage Partie iii. Compléments sur les chaînes

▶ On veut afficher le résultat d’une division euclidienne avec (n,d)=(17,5)

17 = 3 × 5 + 2

▶ Version lourde : dur à modifier et à lire.

>>> str(n)+' = '+str(n//d)+' × '+str(d)+' + '+str(n%d)'17 = 3 × 5 + 2'

shell

▶ Version plus lisible et plus aisément modifiable sur le long terme.

>>> f'{n} = {n//d} × {d} + {n%d}''17 = 3 × 5 + 2'

shell

L’ajout d’un f devant la chaîne permet d’utiliser des variables ou desexpressions entre accolades. On parle de f-string.

20/52

Page 141: Programmation impérative en Python 3 — Cours 6. Exceptions

Chaînes de formatage Partie iii. Compléments sur les chaînes

▶ On veut afficher le résultat d’une division euclidienne avec (n,d)=(17,5)

17 = 3 × 5 + 2

▶ Version lourde : dur à modifier et à lire.

>>> str(n)+' = '+str(n//d)+' × '+str(d)+' + '+str(n%d)'17 = 3 × 5 + 2'

shell

▶ Version plus lisible et plus aisément modifiable sur le long terme.

>>> f'{n} = {n//d} × {d} + {n%d}''17 = 3 × 5 + 2'

shell

L’ajout d’un f devant la chaîne permet d’utiliser des variables ou desexpressions entre accolades. On parle de f-string.

20/52

Page 142: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>>

f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :

>>> a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 143: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}'

'3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>>

a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 144: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345

>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 145: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345>>>

f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 146: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}'

'1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 147: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 148: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>>

f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 149: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}'

'16.76% 50% 133.3333%'

shell

21/52

Page 150: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : flottant Partie iii. Compléments sur les chaînes

▶ On peut choisir le nombre de chiffres après la virgule.

>>> pi3.141592653589793>>> f'{pi:.0f} {pi:.2f} {pi:.4f}''3 3.14 3.1416'

shell

▶ On peut préférer l’écriture scientifique (12345 = 1,2345×104) :>>> a=12345>>> f'{a:.0e} {a:.1e} {a:.2e} {a:.6e}''1e+04 1.2e+04 1.23e+04 1.234500e+04'

shell

▶ On peut même utiliser des pourcentages :

>>> f'{0.1676:.2%} {1/2:.0%} {4/3:.4%}''16.76% 50% 133.3333%'

shell

21/52

Page 151: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : alignement Partie iii. Compléments sur les chaînes

▶ Le formatage permet aussi d‘aligner des chaînes de tailles différentes.

texte = "Où suis-je ?"print('#'*50) # Chaîne de 50 caractèresprint(f"{texte:<50} fin") # aligné à gauche sur 50 caractèresprint(f"{texte:>50} fin") # aligné à droite sur 50 caractèresprint(f"{texte:^50} fin") # centré sur 50 caractèresprint("")print(f"{texte:*<50} fin")print(f"{texte:*>50} fin") # On peut même préciserprint(f"{texte:*^50} fin") # les caractères à ajouter

scRipt

##################################################Où suis-je ? fin

Où suis-je ? finOù suis-je ? fin

Où suis-je ?************************************** fin**************************************Où suis-je ? fin*******************Où suis-je ?******************* fin

shell

▶ Application : écrire sur 3 chiffres (à faire chez vous) :

1-11-21-31-41-51-61-71-81-91-101-avant001-011-021-031-041-051-061-071-081-091-101-après

shell

22/52

Page 152: Programmation impérative en Python 3 — Cours 6. Exceptions

Formatage avancé : alignement Partie iii. Compléments sur les chaînes

▶ Le formatage permet aussi d‘aligner des chaînes de tailles différentes.

texte = "Où suis-je ?"print('#'*50) # Chaîne de 50 caractèresprint(f"{texte:<50} fin") # aligné à gauche sur 50 caractèresprint(f"{texte:>50} fin") # aligné à droite sur 50 caractèresprint(f"{texte:^50} fin") # centré sur 50 caractèresprint("")print(f"{texte:*<50} fin")print(f"{texte:*>50} fin") # On peut même préciserprint(f"{texte:*^50} fin") # les caractères à ajouter

scRipt

##################################################Où suis-je ? fin

Où suis-je ? finOù suis-je ? fin

Où suis-je ?************************************** fin**************************************Où suis-je ? fin*******************Où suis-je ?******************* fin

shell

▶ Application : écrire sur 3 chiffres (à faire chez vous) :

1-11-21-31-41-51-61-71-81-91-101-avant001-011-021-031-041-051-061-071-081-091-101-après

shell

22/52

Page 153: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères

▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 154: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).

▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 155: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 156: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>>

'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 157: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')

['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 158: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>>

'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 159: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()

['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 160: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 161: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>>

'-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 162: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])

'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 163: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>>

''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 164: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])

'partiel18032019'

shell

23/52

Page 165: Programmation impérative en Python 3 — Cours 6. Exceptions

Découper une ligne de texte Partie iii. Compléments sur les chaînes

▶ On peut stocker des informations dans une chaîne de caractères▶ avec les divers éléments séparés par une virgule (ou un espace).▶ On parle de format csv : utilisé par les tableurs▶ permet de stocker une feuille de calcul au format texte.

▶ On peut découper une chaîne pour récupérer la liste des éléments▶ méthode split

>>> 'mathématiques,12,10,15, 8,17'.split(sep = ',')['mathématiques', '12', '10', '15', ' 8', '17']>>> 'mathématiques 12 10 15 8 17'.split()['mathématiques', '12', '10', '15', '8', '17']

shell

▶ Inversement, on peut recoller les éléments d’une liste de chaînes▶ méthode sep.join(L) (éléments de L séparés par sep)

>>> '-'.join(['partiel','18','03','2019'])'partiel-18-03-2019'>>> ''.join(['partiel','18','03','2019'])'partiel18032019'

shell

23/52

Page 166: Programmation impérative en Python 3 — Cours 6. Exceptions

Sommaire

F Partie i. Exceptions

F Partie ii. Lancer des exceptions

F Partie iii. Compléments sur les chaînes

F Partie iv. Systèmes de fichier

F Partie v. E/S : écrire dans un fichier

F Partie vi. E/S : lire dans un fichier

F Partie vii. Table des matières

24/52

Page 167: Programmation impérative en Python 3 — Cours 6. Exceptions

Utilité des fichiers Partie iv. Systèmes de fichier

▶ Le mot fichier provient de fiche :feuille de carton sur laquelle on écrit soit les titres des ouvrages que l’on veutcataloguer, soit les renseignements sur une personne ou un fait que l’on veutgarder et retrouver facilement.

▶ Le fichier désignait le recueil des fiches (ou le meuble les contenant).

▶ Un fichier informatique est un ensemble structuré d’information▶ tableau : feuille de calcul▶ suite d’instructions : programme

▶ texte (txt, html, odt).▶ données quelconques (image, vidéo, ect.)

▶ Les systèmes d’exploitation permettent de travailler sur des fichiers▶ stockage de grandes quantités d’informations▶ recherche, classement, modification▶ fichiers stockés sur le disque dur (ou clé USB, etc)

▶ Système d’exploitation : Operating System (OS).▶ exemples : GNU/Linux, Android, Windows, macOS, etc

25/52

Page 168: Programmation impérative en Python 3 — Cours 6. Exceptions

Utilité des fichiers Partie iv. Systèmes de fichier

▶ Le mot fichier provient de fiche :feuille de carton sur laquelle on écrit soit les titres des ouvrages que l’on veutcataloguer, soit les renseignements sur une personne ou un fait que l’on veutgarder et retrouver facilement.

▶ Le fichier désignait le recueil des fiches (ou le meuble les contenant).

▶ Un fichier informatique est un ensemble structuré d’information▶ tableau : feuille de calcul▶ suite d’instructions : programme

▶ texte (txt, html, odt).▶ données quelconques (image, vidéo, ect.)

▶ Les systèmes d’exploitation permettent de travailler sur des fichiers▶ stockage de grandes quantités d’informations▶ recherche, classement, modification▶ fichiers stockés sur le disque dur (ou clé USB, etc)

▶ Système d’exploitation : Operating System (OS).▶ exemples : GNU/Linux, Android, Windows, macOS, etc

25/52

Page 169: Programmation impérative en Python 3 — Cours 6. Exceptions

Utilité des fichiers Partie iv. Systèmes de fichier

▶ Le mot fichier provient de fiche :feuille de carton sur laquelle on écrit soit les titres des ouvrages que l’on veutcataloguer, soit les renseignements sur une personne ou un fait que l’on veutgarder et retrouver facilement.

▶ Le fichier désignait le recueil des fiches (ou le meuble les contenant).

▶ Un fichier informatique est un ensemble structuré d’information▶ tableau : feuille de calcul▶ suite d’instructions : programme

▶ texte (txt, html, odt).▶ données quelconques (image, vidéo, ect.)

▶ Les systèmes d’exploitation permettent de travailler sur des fichiers▶ stockage de grandes quantités d’informations▶ recherche, classement, modification▶ fichiers stockés sur le disque dur (ou clé USB, etc)

▶ Système d’exploitation : Operating System (OS).▶ exemples : GNU/Linux, Android, Windows, macOS, etc

25/52

Page 170: Programmation impérative en Python 3 — Cours 6. Exceptions

Utilité des fichiers Partie iv. Systèmes de fichier

▶ Le mot fichier provient de fiche :feuille de carton sur laquelle on écrit soit les titres des ouvrages que l’on veutcataloguer, soit les renseignements sur une personne ou un fait que l’on veutgarder et retrouver facilement.

▶ Le fichier désignait le recueil des fiches (ou le meuble les contenant).

▶ Un fichier informatique est un ensemble structuré d’information▶ tableau : feuille de calcul▶ suite d’instructions : programme

▶ texte (txt, html, odt).▶ données quelconques (image, vidéo, ect.)

▶ Les systèmes d’exploitation permettent de travailler sur des fichiers▶ stockage de grandes quantités d’informations▶ recherche, classement, modification▶ fichiers stockés sur le disque dur (ou clé USB, etc)

▶ Système d’exploitation : Operating System (OS).▶ exemples : GNU/Linux, Android, Windows, macOS, etc

25/52

Page 171: Programmation impérative en Python 3 — Cours 6. Exceptions

Utilité des fichiers Partie iv. Systèmes de fichier

▶ Le mot fichier provient de fiche :feuille de carton sur laquelle on écrit soit les titres des ouvrages que l’on veutcataloguer, soit les renseignements sur une personne ou un fait que l’on veutgarder et retrouver facilement.

▶ Le fichier désignait le recueil des fiches (ou le meuble les contenant).

▶ Un fichier informatique est un ensemble structuré d’information▶ tableau : feuille de calcul▶ suite d’instructions : programme

▶ texte (txt, html, odt).▶ données quelconques (image, vidéo, ect.)

▶ Les systèmes d’exploitation permettent de travailler sur des fichiers▶ stockage de grandes quantités d’informations▶ recherche, classement, modification▶ fichiers stockés sur le disque dur (ou clé USB, etc)

▶ Système d’exploitation : Operating System (OS).▶ exemples : GNU/Linux, Android, Windows, macOS, etc

25/52

Page 172: Programmation impérative en Python 3 — Cours 6. Exceptions

Un peu d’histoire Partie iv. Systèmes de fichier

▶ Le père de tous les systèmes d’exploitation moderne est UNIX (≈ 1975).

▶ Il est à l’origine de tous les systèmes d’exploitation digne de ce nom.

• Pour les serveurs :▶ La famille BSD : FreeBSD, NetBSD, OpenBSD (sécurité), dragonflyBSD▶ La famille propriétaire : AIX (IBM), Solaris (Oracle), HP-UX (HP),…▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…

• Pour les particuliers :▶ macOS (anciennement Mac OS X)▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…▶ Les autres Linux (android)

▶ L’autre grande famille est composée des Windows…

26/52

Page 173: Programmation impérative en Python 3 — Cours 6. Exceptions

Un peu d’histoire Partie iv. Systèmes de fichier

▶ Le père de tous les systèmes d’exploitation moderne est UNIX (≈ 1975).

▶ Il est à l’origine de tous les systèmes d’exploitation digne de ce nom.

• Pour les serveurs :▶ La famille BSD : FreeBSD, NetBSD, OpenBSD (sécurité), dragonflyBSD▶ La famille propriétaire : AIX (IBM), Solaris (Oracle), HP-UX (HP),…▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…

• Pour les particuliers :▶ macOS (anciennement Mac OS X)▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…▶ Les autres Linux (android)

▶ L’autre grande famille est composée des Windows…

26/52

Page 174: Programmation impérative en Python 3 — Cours 6. Exceptions

Un peu d’histoire Partie iv. Systèmes de fichier

▶ Le père de tous les systèmes d’exploitation moderne est UNIX (≈ 1975).

▶ Il est à l’origine de tous les systèmes d’exploitation digne de ce nom.

• Pour les serveurs :▶ La famille BSD : FreeBSD, NetBSD, OpenBSD (sécurité), dragonflyBSD▶ La famille propriétaire : AIX (IBM), Solaris (Oracle), HP-UX (HP),…▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…

• Pour les particuliers :▶ macOS (anciennement Mac OS X)▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…▶ Les autres Linux (android)

▶ L’autre grande famille est composée des Windows…

26/52

Page 175: Programmation impérative en Python 3 — Cours 6. Exceptions

Un peu d’histoire Partie iv. Systèmes de fichier

▶ Le père de tous les systèmes d’exploitation moderne est UNIX (≈ 1975).

▶ Il est à l’origine de tous les systèmes d’exploitation digne de ce nom.

• Pour les serveurs :▶ La famille BSD : FreeBSD, NetBSD, OpenBSD (sécurité), dragonflyBSD▶ La famille propriétaire : AIX (IBM), Solaris (Oracle), HP-UX (HP),…▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…

• Pour les particuliers :▶ macOS (anciennement Mac OS X)▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…▶ Les autres Linux (android)

▶ L’autre grande famille est composée des Windows…

26/52

Page 176: Programmation impérative en Python 3 — Cours 6. Exceptions

Un peu d’histoire Partie iv. Systèmes de fichier

▶ Le père de tous les systèmes d’exploitation moderne est UNIX (≈ 1975).

▶ Il est à l’origine de tous les systèmes d’exploitation digne de ce nom.

• Pour les serveurs :▶ La famille BSD : FreeBSD, NetBSD, OpenBSD (sécurité), dragonflyBSD▶ La famille propriétaire : AIX (IBM), Solaris (Oracle), HP-UX (HP),…▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…

• Pour les particuliers :▶ macOS (anciennement Mac OS X)▶ La famille GNU/Linux : Debian, Ubuntu, Red Hat, Gentoo,…▶ Les autres Linux (android)

▶ L’autre grande famille est composée des Windows…

26/52

Page 177: Programmation impérative en Python 3 — Cours 6. Exceptions

Système de fichiers Partie iv. Systèmes de fichier

▶ Les fichiers sont regroupés dans une arborescence,▶ avec une ou plusieurs racines▶ les nœuds sont les répertoires (ou dossiers)▶ les feuilles sont les fichiers▶ un répertoire peut contenir des sous-répertoires et des fichiers.

▶ Il y a essentiellement deux systèmes d’arborescence :▶ Unix (GNU/Linux, macOS, BSD) avec des petites variantes▶ Windows

▶ Sur Unix, une seule racine (nommée /).

▶ Sur Windows, plusieurs racines (nommées C:\, D:\, etc).▶ En général, C:\ représente le disque principal.

27/52

Page 178: Programmation impérative en Python 3 — Cours 6. Exceptions

Système de fichiers Partie iv. Systèmes de fichier

▶ Les fichiers sont regroupés dans une arborescence,▶ avec une ou plusieurs racines▶ les nœuds sont les répertoires (ou dossiers)▶ les feuilles sont les fichiers▶ un répertoire peut contenir des sous-répertoires et des fichiers.

▶ Il y a essentiellement deux systèmes d’arborescence :▶ Unix (GNU/Linux, macOS, BSD) avec des petites variantes▶ Windows

▶ Sur Unix, une seule racine (nommée /).

▶ Sur Windows, plusieurs racines (nommées C:\, D:\, etc).▶ En général, C:\ représente le disque principal.

27/52

Page 179: Programmation impérative en Python 3 — Cours 6. Exceptions

Système de fichiers Partie iv. Systèmes de fichier

▶ Les fichiers sont regroupés dans une arborescence,▶ avec une ou plusieurs racines▶ les nœuds sont les répertoires (ou dossiers)▶ les feuilles sont les fichiers▶ un répertoire peut contenir des sous-répertoires et des fichiers.

▶ Il y a essentiellement deux systèmes d’arborescence :▶ Unix (GNU/Linux, macOS, BSD) avec des petites variantes▶ Windows

▶ Sur Unix, une seule racine (nommée /).

▶ Sur Windows, plusieurs racines (nommées C:\, D:\, etc).▶ En général, C:\ représente le disque principal.

27/52

Page 180: Programmation impérative en Python 3 — Cours 6. Exceptions

Système de fichiers Partie iv. Systèmes de fichier

▶ Les fichiers sont regroupés dans une arborescence,▶ avec une ou plusieurs racines▶ les nœuds sont les répertoires (ou dossiers)▶ les feuilles sont les fichiers▶ un répertoire peut contenir des sous-répertoires et des fichiers.

▶ Il y a essentiellement deux systèmes d’arborescence :▶ Unix (GNU/Linux, macOS, BSD) avec des petites variantes▶ Windows

▶ Sur Unix, une seule racine (nommée /).

▶ Sur Windows, plusieurs racines (nommées C:\, D:\, etc).▶ En général, C:\ représente le disque principal.

27/52

Page 181: Programmation impérative en Python 3 — Cours 6. Exceptions

Arborescence Partie iv. Systèmes de fichier

▶ Un répertoire est relié à la racine par un cheminArborescence Unix

/

usr/

bin/

python3

share/

python3/

py3versions.py

home/

olivier/

python-2022/

CM/

C6/

python-06.tex python-06.pdf

EDT/

groupe-a.png

Arborescence WindowsC:\

Windows\

Boot\

DVD\

Temp\

Users\

olivier\

python-2022\

CM\

C6\

python-06.tex python-06.pdf

EDT\

groupe-a.png

▶ Chemin :▶ Unix /home/olivier/python-2022/EDT/groupe-a.png▶ Windows C:\Users\olivier\python-2022\EDT\groupe-a.png

28/52

Page 182: Programmation impérative en Python 3 — Cours 6. Exceptions

Arborescence Partie iv. Systèmes de fichier

▶ Un répertoire est relié à la racine par un cheminArborescence Unix

/

usr/

bin/

python3

share/

python3/

py3versions.py

home/

olivier/

python-2022/

CM/

C6/

python-06.tex python-06.pdf

EDT/

groupe-a.png

Arborescence WindowsC:\

Windows\

Boot\

DVD\

Temp\

Users\

olivier\

python-2022\

CM\

C6\

python-06.tex python-06.pdf

EDT\

groupe-a.png

▶ Chemin :▶ Unix /home/olivier/python-2022/EDT/groupe-a.png

▶ Windows C:\Users\olivier\python-2022\EDT\groupe-a.png

28/52

Page 183: Programmation impérative en Python 3 — Cours 6. Exceptions

Arborescence Partie iv. Systèmes de fichier

▶ Un répertoire est relié à la racine par un cheminArborescence Unix

/

usr/

bin/

python3

share/

python3/

py3versions.py

home/

olivier/

python-2022/

CM/

C6/

python-06.tex python-06.pdf

EDT/

groupe-a.png

Arborescence WindowsC:\

Windows\

Boot\

DVD\

Temp\

Users\

olivier\

python-2022\

CM\

C6\

python-06.tex python-06.pdf

EDT\

groupe-a.png

▶ Chemin :▶ Unix /home/olivier/python-2022/EDT/groupe-a.png▶ Windows C:\Users\olivier\python-2022\EDT\groupe-a.png

28/52

Page 184: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins relatifs et absolus Partie iv. Systèmes de fichier

▶ Il y a deux façons d’indiquer où se trouve un fichier ou un répertoire▶ Les chemins absolus▶ Les chemins relatifs

▶ Chemins absolus : chemin complet à partir de la racine.▶ /home/olivier/python-2022/EDT/groupe-a.png▶ C:\Users\olivier\python-2022\EDT\groupe-a.png

▶ Chemins relatifs : chemin à partir du répertoire courant.

• EDT/groupe-a.png peut correspondre à▶ /home/olivier/python-2022/EDT/groupe-a.png▶ /home/olivier/python-2022/sauvegarde/EDT/groupe-a.png

• Cela dépend si je suis dans sauvegarde ou python-2022

▶ Le répertoire parent (du dessus) se note ..▶ Si je suis dans /home/olivier, .. est le chemin vers /home▶ La racine / est le seul répertoire sans parent. :’(

29/52

Page 185: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins relatifs et absolus Partie iv. Systèmes de fichier

▶ Il y a deux façons d’indiquer où se trouve un fichier ou un répertoire▶ Les chemins absolus▶ Les chemins relatifs

▶ Chemins absolus : chemin complet à partir de la racine.▶ /home/olivier/python-2022/EDT/groupe-a.png▶ C:\Users\olivier\python-2022\EDT\groupe-a.png

▶ Chemins relatifs : chemin à partir du répertoire courant.

• EDT/groupe-a.png peut correspondre à▶ /home/olivier/python-2022/EDT/groupe-a.png▶ /home/olivier/python-2022/sauvegarde/EDT/groupe-a.png

• Cela dépend si je suis dans sauvegarde ou python-2022

▶ Le répertoire parent (du dessus) se note ..▶ Si je suis dans /home/olivier, .. est le chemin vers /home▶ La racine / est le seul répertoire sans parent. :’(

29/52

Page 186: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins relatifs et absolus Partie iv. Systèmes de fichier

▶ Il y a deux façons d’indiquer où se trouve un fichier ou un répertoire▶ Les chemins absolus▶ Les chemins relatifs

▶ Chemins absolus : chemin complet à partir de la racine.▶ /home/olivier/python-2022/EDT/groupe-a.png▶ C:\Users\olivier\python-2022\EDT\groupe-a.png

▶ Chemins relatifs : chemin à partir du répertoire courant.

• EDT/groupe-a.png peut correspondre à▶ /home/olivier/python-2022/EDT/groupe-a.png▶ /home/olivier/python-2022/sauvegarde/EDT/groupe-a.png

• Cela dépend si je suis dans sauvegarde ou python-2022

▶ Le répertoire parent (du dessus) se note ..▶ Si je suis dans /home/olivier, .. est le chemin vers /home▶ La racine / est le seul répertoire sans parent. :’(

29/52

Page 187: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins relatifs et absolus Partie iv. Systèmes de fichier

▶ Il y a deux façons d’indiquer où se trouve un fichier ou un répertoire▶ Les chemins absolus▶ Les chemins relatifs

▶ Chemins absolus : chemin complet à partir de la racine.▶ /home/olivier/python-2022/EDT/groupe-a.png▶ C:\Users\olivier\python-2022\EDT\groupe-a.png

▶ Chemins relatifs : chemin à partir du répertoire courant.

• EDT/groupe-a.png peut correspondre à▶ /home/olivier/python-2022/EDT/groupe-a.png▶ /home/olivier/python-2022/sauvegarde/EDT/groupe-a.png

• Cela dépend si je suis dans sauvegarde ou python-2022

▶ Le répertoire parent (du dessus) se note ..▶ Si je suis dans /home/olivier, .. est le chemin vers /home▶ La racine / est le seul répertoire sans parent. :’(

29/52

Page 188: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins relatifs et absolus Partie iv. Systèmes de fichier

▶ Il y a deux façons d’indiquer où se trouve un fichier ou un répertoire▶ Les chemins absolus▶ Les chemins relatifs

▶ Chemins absolus : chemin complet à partir de la racine.▶ /home/olivier/python-2022/EDT/groupe-a.png▶ C:\Users\olivier\python-2022\EDT\groupe-a.png

▶ Chemins relatifs : chemin à partir du répertoire courant.

• EDT/groupe-a.png peut correspondre à▶ /home/olivier/python-2022/EDT/groupe-a.png▶ /home/olivier/python-2022/sauvegarde/EDT/groupe-a.png

• Cela dépend si je suis dans sauvegarde ou python-2022

▶ Le répertoire parent (du dessus) se note ..▶ Si je suis dans /home/olivier, .. est le chemin vers /home▶ La racine / est le seul répertoire sans parent.

:’(

29/52

Page 189: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins relatifs et absolus Partie iv. Systèmes de fichier

▶ Il y a deux façons d’indiquer où se trouve un fichier ou un répertoire▶ Les chemins absolus▶ Les chemins relatifs

▶ Chemins absolus : chemin complet à partir de la racine.▶ /home/olivier/python-2022/EDT/groupe-a.png▶ C:\Users\olivier\python-2022\EDT\groupe-a.png

▶ Chemins relatifs : chemin à partir du répertoire courant.

• EDT/groupe-a.png peut correspondre à▶ /home/olivier/python-2022/EDT/groupe-a.png▶ /home/olivier/python-2022/sauvegarde/EDT/groupe-a.png

• Cela dépend si je suis dans sauvegarde ou python-2022

▶ Le répertoire parent (du dessus) se note ..▶ Si je suis dans /home/olivier, .. est le chemin vers /home▶ La racine / est le seul répertoire sans parent. :’(

29/52

Page 190: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 191: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>>

import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 192: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os

>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 193: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>>

os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 194: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()

'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 195: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 196: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>>

os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 197: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif

>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 198: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>>

os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 199: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()

'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 200: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>>

os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 201: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu

>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 202: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>>

os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 203: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()

'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 204: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>>

os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 205: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichier

Traceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 206: Programmation impérative en Python 3 — Cours 6. Exceptions

Le répertoire courant et le module os Partie iv. Systèmes de fichier

▶ Pour utiliser des chemins relatifs, il faut connaître le répertoire courant.▶ C’est le répertoire à partir duquel on lance le programme

▶ Le module os permet de manipuler le système de fichiers en Python.

>>> import os>>> os.getcwd()'/home/olivier/python-2022/CM/C6'

shell

▶ Pour changer de répertoire courant et se déplacer : os.chdir(…)

>>> os.chdir('../../EDT/') # chemin relatif>>> os.getcwd()'/home/olivier/python-2022/EDT'>>> os.chdir('/home/olivier/python-2022/Docs/')# chemin absolu>>> os.getcwd()'/home/olivier/python-2022/Docs'>>> os.chdir('tkinter.pdf') # ne peut pas se déplacer dans un fichierTraceback (most recent call last):File "<console>", line 1, in <module>

NotADirectoryError: [Errno 20] Not a directory:'tkinter.pdf'

shell

30/52

Page 207: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.

>>> os.name #Sous Linux'posix'

shell

>>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 208: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")

▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.

>>> os.name #Sous Linux'posix'

shell

>>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 209: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.

>>> os.name #Sous Linux'posix'

shell

>>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 210: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.>>>

os.name #Sous Linux'posix'

shell >>>

os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 211: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.>>> os.name #Sous Linux

'posix'

shell >>> os.name #Sous Windows

'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 212: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.>>> os.name #Sous Linux'posix'

shell >>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 213: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.>>> os.name #Sous Linux'posix'

shell >>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>>

os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>>

os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 214: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.>>> os.name #Sous Linux'posix'

shell >>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux

'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows

'..\\QCM\\q1.xml'

shell

31/52

Page 215: Programmation impérative en Python 3 — Cours 6. Exceptions

Chemins et chaînes de caractères Partie iv. Systèmes de fichier

▶ Un chemin peut être codé en Python par une chaîne.

▶ Problème avec Windows (qui ne suit pas les conventions UNIX) :▶ les \ doivent être doublés▶ \ est un caractère d’échappement dans une chaîne ("\n \' \\ ")▶ Linux : '/home/olivier/python-2022/EDT/groupe-a.png'▶ Windows : 'C:\\home\\olivier\\python-2022\\EDT\\groupe-a.png'

▶ Un bon logiciel doit fonctionner sur tous les OS.

▶ On peut demander en Python sur quel système on travaille.>>> os.name #Sous Linux'posix'

shell >>> os.name #Sous Windows'nt'

shell

▶ On peut construire un chemin de manière portable.

>>> os.path.join('..','QCM','q1.xml') # Sous Linux'../QCM/q1.xml'

shell

>>> os.path.join('..','QCM','q1.xml') # Sous Windows'..\\QCM\\q1.xml'

shell

31/52

Page 216: Programmation impérative en Python 3 — Cours 6. Exceptions

Quelques fonctions utiles du module os Partie iv. Systèmes de fichier

os.getcwd() renvoie le répertoire courantos.chdir(path) change de répertoire courantos.listdir(path='.') liste des fichiers et répertoiresos.path.join(path1,path2,…) construction portable d’un cheminos.remove(path) suppression d’un fichieros.path.isfile(path) test d’existence d’un fichieros.path.isdir(path) test d’existence d’un répertoireos.path.split(path) pour extraire le fichier d’un cheminos.path.getsize(path) la taille d’un fichier

https://docs.python.org/fr/3.7/library/os.html

32/52

Page 217: Programmation impérative en Python 3 — Cours 6. Exceptions

Sommaire

F Partie i. Exceptions

F Partie ii. Lancer des exceptions

F Partie iii. Compléments sur les chaînes

F Partie iv. Systèmes de fichier

F Partie v. E/S : écrire dans un fichier

F Partie vi. E/S : lire dans un fichier

F Partie vii. Table des matières

33/52

Page 218: Programmation impérative en Python 3 — Cours 6. Exceptions

Entrées/Sorties (E/S) Partie v. E/S : Écrire

L’ordinateur communique avec le restedu monde

▶ Entrée :▶ Souris et clavier▶ Micro, caméra▶ Disque dur, clé usb, disquette▶ Câble éthernet (internet)

▶ Sortie :▶ Écran▶ Imprimante▶ Disque dur, clé usb, disquette▶ Enceinte

34/52

Page 219: Programmation impérative en Python 3 — Cours 6. Exceptions

Entrées/Sorties (E/S) Partie v. E/S : Écrire

L’ordinateur communique avec le restedu monde

▶ Entrée :▶ Souris et clavier▶ Micro, caméra▶ Disque dur, clé usb, disquette▶ Câble éthernet (internet)

▶ Sortie :▶ Écran▶ Imprimante▶ Disque dur, clé usb, disquette▶ Enceinte

34/52

Page 220: Programmation impérative en Python 3 — Cours 6. Exceptions

Entrées/Sorties (E/S) Partie v. E/S : Écrire

L’ordinateur communique avec le restedu monde

▶ Entrée :▶ Souris et clavier▶ Micro, caméra▶ Disque dur, clé usb, disquette▶ Câble éthernet (internet)

▶ Sortie :▶ Écran▶ Imprimante▶ Disque dur, clé usb, disquette▶ Enceinte

34/52

Page 221: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 222: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 223: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 224: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 225: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>>

f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 226: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out

<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 227: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 228: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 229: Programmation impérative en Python 3 — Cours 6. Exceptions

Ouverture d’un fichier en écriture Partie v. E/S : Écrire

▶ On souhaite créer un fichier test.txt contenant des résultats.

▶ Nous ne travaillerons dans ce cours qu’avec des fichiers de texte.

▶ Dans un tel fichier, nous déposerons des chaînes de caractères. Pour yécrire -234, nous déposerons '-234'.

▶ Commençons par ouvrir un fichier test.txt en écriture (write).

f_out = open('test.txt', 'w', encoding = 'utf-8') scRipt

▶ On peut indiquer un chemin (absolu ou relatif) menant au fichier.▶ Si un ancien fichier de ce nom existe, il sera remplacé.

>>> f_out<_io.TextIOWrapper name='test.txt' mode='w' encoding='utf-8'>

shell

▶ La valeur de f_out, renvoyé par open, est un descripteur de fichier.

▶ L’encodage par défaut dépend de la machine.

35/52

Page 230: Programmation impérative en Python 3 — Cours 6. Exceptions

Écriture dans un fichier Partie v. E/S : Écrire

▶ Une fois le fichier ouvert, il est prêt à recevoir des données.

▶ si le fichier n’existait pas, on va le créer.▶ s’il existait déjà : on l’écrase et on recommence à zéro.

▶ On écrit dans le fichier avec la méthode write du descripteur de fichier.

f_out.write('Bonjour tout le monde !\n')f_out.write('Voici un texte écrit depuis Python !\n')

scRipt

▶ Il faut déposer le caractère de retour à la ligne '\n',▶ sinon, le prochain write prendra effet sur la même ligne.

▶ Les écritures sont mises en tampon ; elles ne prennent pas forcément effetimmédiatement. À la fin du traitement, il faut fermer le fichier (close)pour que tout soit bien écrit.

f_out.close() scRipt

36/52

Page 231: Programmation impérative en Python 3 — Cours 6. Exceptions

Écriture dans un fichier Partie v. E/S : Écrire

▶ Une fois le fichier ouvert, il est prêt à recevoir des données.▶ si le fichier n’existait pas, on va le créer.

▶ s’il existait déjà : on l’écrase et on recommence à zéro.

▶ On écrit dans le fichier avec la méthode write du descripteur de fichier.

f_out.write('Bonjour tout le monde !\n')f_out.write('Voici un texte écrit depuis Python !\n')

scRipt

▶ Il faut déposer le caractère de retour à la ligne '\n',▶ sinon, le prochain write prendra effet sur la même ligne.

▶ Les écritures sont mises en tampon ; elles ne prennent pas forcément effetimmédiatement. À la fin du traitement, il faut fermer le fichier (close)pour que tout soit bien écrit.

f_out.close() scRipt

36/52

Page 232: Programmation impérative en Python 3 — Cours 6. Exceptions

Écriture dans un fichier Partie v. E/S : Écrire

▶ Une fois le fichier ouvert, il est prêt à recevoir des données.▶ si le fichier n’existait pas, on va le créer.▶ s’il existait déjà : on l’écrase et on recommence à zéro.

▶ On écrit dans le fichier avec la méthode write du descripteur de fichier.

f_out.write('Bonjour tout le monde !\n')f_out.write('Voici un texte écrit depuis Python !\n')

scRipt

▶ Il faut déposer le caractère de retour à la ligne '\n',▶ sinon, le prochain write prendra effet sur la même ligne.

▶ Les écritures sont mises en tampon ; elles ne prennent pas forcément effetimmédiatement. À la fin du traitement, il faut fermer le fichier (close)pour que tout soit bien écrit.

f_out.close() scRipt

36/52

Page 233: Programmation impérative en Python 3 — Cours 6. Exceptions

Écriture dans un fichier Partie v. E/S : Écrire

▶ Une fois le fichier ouvert, il est prêt à recevoir des données.▶ si le fichier n’existait pas, on va le créer.▶ s’il existait déjà : on l’écrase et on recommence à zéro.

▶ On écrit dans le fichier avec la méthode write du descripteur de fichier.

f_out.write('Bonjour tout le monde !\n')f_out.write('Voici un texte écrit depuis Python !\n')

scRipt

▶ Il faut déposer le caractère de retour à la ligne '\n',▶ sinon, le prochain write prendra effet sur la même ligne.

▶ Les écritures sont mises en tampon ; elles ne prennent pas forcément effetimmédiatement. À la fin du traitement, il faut fermer le fichier (close)pour que tout soit bien écrit.

f_out.close() scRipt

36/52

Page 234: Programmation impérative en Python 3 — Cours 6. Exceptions

Écriture dans un fichier Partie v. E/S : Écrire

▶ Une fois le fichier ouvert, il est prêt à recevoir des données.▶ si le fichier n’existait pas, on va le créer.▶ s’il existait déjà : on l’écrase et on recommence à zéro.

▶ On écrit dans le fichier avec la méthode write du descripteur de fichier.

f_out.write('Bonjour tout le monde !\n')f_out.write('Voici un texte écrit depuis Python !\n')

scRipt

▶ Il faut déposer le caractère de retour à la ligne '\n',▶ sinon, le prochain write prendra effet sur la même ligne.

▶ Les écritures sont mises en tampon ; elles ne prennent pas forcément effetimmédiatement. À la fin du traitement, il faut fermer le fichier (close)pour que tout soit bien écrit.

f_out.close() scRipt

36/52

Page 235: Programmation impérative en Python 3 — Cours 6. Exceptions

Écriture dans un fichier Partie v. E/S : Écrire

▶ Une fois le fichier ouvert, il est prêt à recevoir des données.▶ si le fichier n’existait pas, on va le créer.▶ s’il existait déjà : on l’écrase et on recommence à zéro.

▶ On écrit dans le fichier avec la méthode write du descripteur de fichier.

f_out.write('Bonjour tout le monde !\n')f_out.write('Voici un texte écrit depuis Python !\n')

scRipt

▶ Il faut déposer le caractère de retour à la ligne '\n',▶ sinon, le prochain write prendra effet sur la même ligne.

▶ Les écritures sont mises en tampon ; elles ne prennent pas forcément effetimmédiatement. À la fin du traitement, il faut fermer le fichier (close)pour que tout soit bien écrit.

f_out.close() scRipt

36/52

Page 236: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>>

f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 237: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')

>>> n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 238: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>>

n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 239: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991

>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 240: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>>

f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 241: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>> f_out.write(n)

Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 242: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 243: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 244: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 245: Programmation impérative en Python 3 — Cours 6. Exceptions

Formater les écritures Partie v. E/S : Écrire

▶ Dans le fichier, on ne peut écrire que des chaînes de caractères.

>>> f_out = open('test.txt', 'w', encoding = 'utf-8')>>> n=1991>>> f_out.write(n)Traceback (most recent call last):File "<console>", line 1, in <module>

TypeError: write() argument must be str, not int

shell

▶ Pour écrire un nombre, il faut d’abord le convertir en chaîne

f_out.write(str(n))f_out.write(" est l’année de naissance de Python.\n")

scRipt

▶ ce qu’on peut aussi écrire…

f_out.write(str(n)+" est l’année de naissance de Python.\n") scRipt

▶ ou encore…f_out.write(f"{n} est l’année de naissance de Python.\n") scRipt

37/52

Page 246: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : générer une table de multiplication Partie v. E/S : Écrire

def créer_table(n):"""crée un fichier contenant la tablede multiplication de n"""# étape 1 : ouverture du fichierf_out = open('table'+str(n)+'.txt','w',encoding='utf-8')# étape 2 : écriture dans le fichierfor i in range(1, 11):

f_out.write(str(i)+'*'+ str(n)+'='+str(i*n)+'\n')# étape 3 : fermeture du fichierf_out.close()

créer_table(7)

scRipt

▶ Pour lire le fichier table7.txt, on utilise un lecteur de fichier texte.

1*7=72*7=143*7=214*7=285*7=356*7=427*7=498*7=569*7=6310*7=70

table7.txt

38/52

Page 247: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : générer une table de multiplication Partie v. E/S : Écrire

def créer_table(n):"""crée un fichier contenant la tablede multiplication de n"""# étape 1 : ouverture du fichierf_out = open('table'+str(n)+'.txt','w',encoding='utf-8')# étape 2 : écriture dans le fichierfor i in range(1, 11):

f_out.write(str(i)+'*'+ str(n)+'='+str(i*n)+'\n')# étape 3 : fermeture du fichierf_out.close()

créer_table(7)

scRipt

▶ Pour lire le fichier table7.txt, on utilise un lecteur de fichier texte.

1*7=72*7=143*7=214*7=285*7=356*7=427*7=498*7=569*7=6310*7=70

table7.txt

38/52

Page 248: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : générer une jolie table de multiplication Partie v. E/S : Écrire

def créer_table(n):"""crée un fichier contenant la tablede multiplication de n"""# étape 1 : ouverture du fichierf_out = open(f'table{n}.txt','w',encoding='utf-8')# étape 2 : écriture dans le fichierfor i in range(1, 11):

f_out.write(f'{i:>2} × {n} = {i*n:>2}\n')# étape 3 : fermeture du fichierf_out.close()

créer_table(7)

scRipt

▶ Les nombres sont correctement alignés.

1 × 7 = 72 × 7 = 143 × 7 = 214 × 7 = 285 × 7 = 356 × 7 = 427 × 7 = 498 × 7 = 569 × 7 = 6310 × 7 = 70

table7.txt

39/52

Page 249: Programmation impérative en Python 3 — Cours 6. Exceptions

Exemple : générer une jolie table de multiplication Partie v. E/S : Écrire

def créer_table(n):"""crée un fichier contenant la tablede multiplication de n"""# étape 1 : ouverture du fichierf_out = open(f'table{n}.txt','w',encoding='utf-8')# étape 2 : écriture dans le fichierfor i in range(1, 11):

f_out.write(f'{i:>2} × {n} = {i*n:>2}\n')# étape 3 : fermeture du fichierf_out.close()

créer_table(7)

scRipt

▶ Les nombres sont correctement alignés.

1 × 7 = 72 × 7 = 143 × 7 = 214 × 7 = 285 × 7 = 356 × 7 = 427 × 7 = 498 × 7 = 569 × 7 = 6310 × 7 = 70

table7.txt

39/52

Page 250: Programmation impérative en Python 3 — Cours 6. Exceptions

Écrire à la fin d’un fichier Partie v. E/S : Écrire

▶ Il peut être intéressant d’ajouter des lignes à un fichier. Il faut alorsl’ouvrir en écriture en mode 'a' (ajout) et non 'w'.

f_out = open('test.txt', 'a', encoding = 'utf-8') scRipt

▶ Pour ajouter deux lignes à la fin du fichier table7.txt.

def allonger_fichier(n):f_out = open(f'table{n}.txt','a',encoding='utf-8')for i in range(11, 13):

f_out.write(f'{i:>2} × {n} = {i*n:>2}\n')f_out.close()

scRipt

▶ Remarque : il n’est pas possible de supprimer des lignes dans un fichierdirectement (mais on peut créer un nouveau fichier et détruire l’ancien).

40/52

Page 251: Programmation impérative en Python 3 — Cours 6. Exceptions

Écrire à la fin d’un fichier Partie v. E/S : Écrire

▶ Il peut être intéressant d’ajouter des lignes à un fichier. Il faut alorsl’ouvrir en écriture en mode 'a' (ajout) et non 'w'.

f_out = open('test.txt', 'a', encoding = 'utf-8') scRipt

▶ Pour ajouter deux lignes à la fin du fichier table7.txt.

def allonger_fichier(n):f_out = open(f'table{n}.txt','a',encoding='utf-8')for i in range(11, 13):

f_out.write(f'{i:>2} × {n} = {i*n:>2}\n')f_out.close()

scRipt

▶ Remarque : il n’est pas possible de supprimer des lignes dans un fichierdirectement (mais on peut créer un nouveau fichier et détruire l’ancien).

40/52

Page 252: Programmation impérative en Python 3 — Cours 6. Exceptions

Écrire à la fin d’un fichier Partie v. E/S : Écrire

▶ Il peut être intéressant d’ajouter des lignes à un fichier. Il faut alorsl’ouvrir en écriture en mode 'a' (ajout) et non 'w'.

f_out = open('test.txt', 'a', encoding = 'utf-8') scRipt

▶ Pour ajouter deux lignes à la fin du fichier table7.txt.

def allonger_fichier(n):f_out = open(f'table{n}.txt','a',encoding='utf-8')for i in range(11, 13):

f_out.write(f'{i:>2} × {n} = {i*n:>2}\n')f_out.close()

scRipt

▶ Remarque : il n’est pas possible de supprimer des lignes dans un fichierdirectement (mais on peut créer un nouveau fichier et détruire l’ancien).

40/52

Page 253: Programmation impérative en Python 3 — Cours 6. Exceptions

Sommaire

F Partie i. Exceptions

F Partie ii. Lancer des exceptions

F Partie iii. Compléments sur les chaînes

F Partie iv. Systèmes de fichier

F Partie v. E/S : écrire dans un fichier

F Partie vi. E/S : lire dans un fichier

F Partie vii. Table des matières

41/52

Page 254: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')

shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 255: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>>

f_in = open('table5.txt', 'r', encoding = 'utf-8')

shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 256: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 257: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne

▶ avec la méthode read().

>>>

texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 258: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !

>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 259: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>>

f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 260: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()

>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 261: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>>

texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 262: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte

'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 263: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>>

print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 264: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)

5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 265: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : read Partie vi. E/S : Lire

▶ Problème inverse : comment lire (read) le fichier table5.txt?

▶ On doit connaître son encodage ; on sait qu’il est en utf-8.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8') shell

▶ On peut lire d’un seul coup la totalité du fichier dans une seule chaîne▶ avec la méthode read().

>>> texte = f_in.read() # texte contient tout le fichier !>>> f_in.close()>>> texte'5 × 1 = 5\n5 × 2 = 10\n5 × 3 = 15\n5 × 4 = 20\n'>>> print(texte)5 × 1 = 55 × 2 = 105 × 3 = 155 × 4 = 20

shell

42/52

Page 266: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readline Partie vi. E/S : Lire

▶ On peut aussi lire le fichier ligne à ligne avec la méthode readline()

def numérote_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')i = 1while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierprint(f'Ligne {i} : {ligne}',sep='',end='')i = i + 1

f_in.close()

scRipt

▶ Le fichier est fini lorsqu’on obtient une chaîne vide.▶ '' : fin du fichier (on quitte le while avec break)▶ '\n' : le fichier contient une ligne vide.

>>> numérote_lignes('table5.txt')Ligne 1 : 5 × 1 = 5Ligne 2 : 5 × 2 = 10Ligne 3 : 5 × 3 = 15Ligne 4 : 5 × 4 = 20

shell

43/52

Page 267: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readline Partie vi. E/S : Lire

▶ On peut aussi lire le fichier ligne à ligne avec la méthode readline()

def numérote_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')i = 1while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierprint(f'Ligne {i} : {ligne}',sep='',end='')i = i + 1

f_in.close()

scRipt

▶ Le fichier est fini lorsqu’on obtient une chaîne vide.▶ '' : fin du fichier (on quitte le while avec break)▶ '\n' : le fichier contient une ligne vide.

>>> numérote_lignes('table5.txt')Ligne 1 : 5 × 1 = 5Ligne 2 : 5 × 2 = 10Ligne 3 : 5 × 3 = 15Ligne 4 : 5 × 4 = 20

shell

43/52

Page 268: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readline Partie vi. E/S : Lire

▶ On peut aussi lire le fichier ligne à ligne avec la méthode readline()

def numérote_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')i = 1while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierprint(f'Ligne {i} : {ligne}',sep='',end='')i = i + 1

f_in.close()

scRipt

▶ Le fichier est fini lorsqu’on obtient une chaîne vide.▶ '' : fin du fichier (on quitte le while avec break)▶ '\n' : le fichier contient une ligne vide.

>>>

numérote_lignes('table5.txt')Ligne 1 : 5 × 1 = 5Ligne 2 : 5 × 2 = 10Ligne 3 : 5 × 3 = 15Ligne 4 : 5 × 4 = 20

shell

43/52

Page 269: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readline Partie vi. E/S : Lire

▶ On peut aussi lire le fichier ligne à ligne avec la méthode readline()

def numérote_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')i = 1while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierprint(f'Ligne {i} : {ligne}',sep='',end='')i = i + 1

f_in.close()

scRipt

▶ Le fichier est fini lorsqu’on obtient une chaîne vide.▶ '' : fin du fichier (on quitte le while avec break)▶ '\n' : le fichier contient une ligne vide.

>>> numérote_lignes('table5.txt')

Ligne 1 : 5 × 1 = 5Ligne 2 : 5 × 2 = 10Ligne 3 : 5 × 3 = 15Ligne 4 : 5 × 4 = 20

shell

43/52

Page 270: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readline Partie vi. E/S : Lire

▶ On peut aussi lire le fichier ligne à ligne avec la méthode readline()

def numérote_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')i = 1while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierprint(f'Ligne {i} : {ligne}',sep='',end='')i = i + 1

f_in.close()

scRipt

▶ Le fichier est fini lorsqu’on obtient une chaîne vide.▶ '' : fin du fichier (on quitte le while avec break)▶ '\n' : le fichier contient une ligne vide.

>>> numérote_lignes('table5.txt')Ligne 1 : 5 × 1 = 5Ligne 2 : 5 × 2 = 10Ligne 3 : 5 × 3 = 15Ligne 4 : 5 × 4 = 20

shell

43/52

Page 271: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : for Partie vi. E/S : Lire

▶ On peut itérer directement sur les lignes avec une boucle for

def affiche_et_compte(f):i=0 # pour compter le nombre de lignesf_in = open(f, 'r', encoding ='utf-8')for ligne in f_in:

print('>' ,ligne, end = '')i=i+1

f_in.close()return i # nombre de lignes

scRipt

>>>

affiche_et_compte('table5.txt')> 5 × 1 = 5> 5 × 2 = 10> 5 × 3 = 15> 5 × 4 = 204

shell

44/52

Page 272: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : for Partie vi. E/S : Lire

▶ On peut itérer directement sur les lignes avec une boucle for

def affiche_et_compte(f):i=0 # pour compter le nombre de lignesf_in = open(f, 'r', encoding ='utf-8')for ligne in f_in:

print('>' ,ligne, end = '')i=i+1

f_in.close()return i # nombre de lignes

scRipt

>>> affiche_et_compte('table5.txt')

> 5 × 1 = 5> 5 × 2 = 10> 5 × 3 = 15> 5 × 4 = 204

shell

44/52

Page 273: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : for Partie vi. E/S : Lire

▶ On peut itérer directement sur les lignes avec une boucle for

def affiche_et_compte(f):i=0 # pour compter le nombre de lignesf_in = open(f, 'r', encoding ='utf-8')for ligne in f_in:

print('>' ,ligne, end = '')i=i+1

f_in.close()return i # nombre de lignes

scRipt

>>> affiche_et_compte('table5.txt')> 5 × 1 = 5> 5 × 2 = 10> 5 × 3 = 15> 5 × 4 = 204

shell

44/52

Page 274: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 275: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>>

liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 276: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')

['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 277: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 278: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>>

f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 279: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')

>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 280: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>>

lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 281: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()

>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 282: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>>

lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 283: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes

['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 284: Programmation impérative en Python 3 — Cours 6. Exceptions

Lecture d’un fichier : readlines Partie vi. E/S : Lire

▶ readline() lit une ligne à la fois.

▶ On veut mettre les lignes lues dans une liste.

def liste_de_lignes(f): # ligne par lignef_in = open(f, 'r', encoding = 'utf-8')L=[]while True: # on quitte avec break

ligne = f_in.readline() # on lit une ligneif ligne == '': break # fin du fichierL.append(ligne)

f_in.close()return L

scRipt

>>> liste_de_lignes('table5.txt')['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

▶ Existe déjà : readlines() avec un s !

>>> f_in = open('table5.txt', 'r', encoding='utf-8')>>> lignes = f_in.readlines() ; f_in.close()>>> lignes['5 × 1 = 5\n', '5 × 2 = 10\n', '5 × 3 = 15\n', '5 × 4 = 20\n']

shell

45/52

Page 285: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : objectifs Partie vi. E/S : Lire

▶ Une méthode classique de travail sur fichier texte▶ on prend un fichier en entrée▶ on produit un autre fichier en sortie

▶ Exemple :▶ lecture d’un fichier : chaque ligne contient des nombres▶ écriture d’un fichier : chaque ligne contient la somme de ces nombres.

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt

246208324190269314307301

somme.txt

46/52

Page 286: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : objectifs Partie vi. E/S : Lire

▶ Une méthode classique de travail sur fichier texte▶ on prend un fichier en entrée▶ on produit un autre fichier en sortie

▶ Exemple :▶ lecture d’un fichier : chaque ligne contient des nombres▶ écriture d’un fichier : chaque ligne contient la somme de ces nombres.

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt 246208324190269314307301

somme.txt

46/52

Page 287: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : construire aléa.txt Partie vi. E/S : Lire

▶ Pour générer le fichier aléatoire, on doit écrire 8 lignes de 5 colonneschacune ; on utilise deux boucles imbriquées.

def créer_aléa(nom_fichier):f_out = open(nom_fichier, 'w', encoding = 'utf-8')for li in range(8): # je produis 8 lignes

for co in range(5): # chaque ligne a 5 colonnesf_out.write(f'{randint(10,99)} ')

f_out.write('\n') # je vais à la lignef_out.close()

scRipt

>>>

créer_aléa('aléa.txt')

shell

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt

47/52

Page 288: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : construire aléa.txt Partie vi. E/S : Lire

▶ Pour générer le fichier aléatoire, on doit écrire 8 lignes de 5 colonneschacune ; on utilise deux boucles imbriquées.

def créer_aléa(nom_fichier):f_out = open(nom_fichier, 'w', encoding = 'utf-8')for li in range(8): # je produis 8 lignes

for co in range(5): # chaque ligne a 5 colonnesf_out.write(f'{randint(10,99)} ')

f_out.write('\n') # je vais à la lignef_out.close()

scRipt

>>> créer_aléa('aléa.txt') shell

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt

47/52

Page 289: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : construire aléa.txt Partie vi. E/S : Lire

▶ Pour générer le fichier aléatoire, on doit écrire 8 lignes de 5 colonneschacune ; on utilise deux boucles imbriquées.

def créer_aléa(nom_fichier):f_out = open(nom_fichier, 'w', encoding = 'utf-8')for li in range(8): # je produis 8 lignes

for co in range(5): # chaque ligne a 5 colonnesf_out.write(f'{randint(10,99)} ')

f_out.write('\n') # je vais à la lignef_out.close()

scRipt

>>> créer_aléa('aléa.txt') shell

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt

47/52

Page 290: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : générer somme.txt Partie vi. E/S : Lire

▶ Pour générer le fichier somme.txt,▶ on lit aléa.txt ligne par ligne▶ à chaque ligne lue, on écrit la somme de la ligne dans somme.txt

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # je calcule la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt

246208324190269314307301

somme.txt

48/52

Page 291: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : générer somme.txt Partie vi. E/S : Lire

▶ Pour générer le fichier somme.txt,▶ on lit aléa.txt ligne par ligne▶ à chaque ligne lue, on écrit la somme de la ligne dans somme.txt

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # je calcule la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt

246208324190269314307301

somme.txt

48/52

Page 292: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : générer somme.txt Partie vi. E/S : Lire

▶ Pour générer le fichier somme.txt,▶ on lit aléa.txt ligne par ligne▶ à chaque ligne lue, on écrit la somme de la ligne dans somme.txt

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # je calcule la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

83 21 10 34 9811 34 18 69 7692 88 28 54 6217 33 45 13 8218 11 88 67 8588 51 89 66 2098 49 72 29 5933 78 86 42 62

alÉa.txt 246208324190269314307301

somme.txt

48/52

Page 293: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>>

'83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 294: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1

['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 295: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>>

[ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 296: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2

[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 297: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>>

sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 298: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2

246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 299: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>>

f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 300: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier

'246\n'

shell

49/52

Page 301: Programmation impérative en Python 3 — Cours 6. Exceptions

Lire, écrire, compter : explications Partie vi. E/S : Lire

▶ Pour ceux qui ronflent au fond de l’amphi.▶ Pour comprendre ce que fait un programme…▶ … on arrête de se tourner les pouces et on sort sa console Python !

f_out = open('somme.txt', 'w', encoding = 'utf-8')f_in = open('aléa.txt', 'r', encoding = 'utf-8')

for ligne in f_in: # j'itère sur les lignes de f_inL1 = ligne.split() # je récupère les entiers sur la ligneL2 = [int(x) for x in L1] # je les convertis en entiersS2 = sum(L2) # Je calcul la somme dans S2f_out.write(f'{S2}\n') # j'écris S2 dans somme.txt

f_in.close() ; f_out.close()

scRipt

>>> '83 21 10 34 98\n'.split() # L1['83', '21', '10', '34', '98']>>> [ int(x) for x in ['83','21','10','34','98']] # L2[83, 21, 10, 34, 98]>>> sum([83,21,10,34,98]) # S2246>>> f'{246}\n' # Ce qu’on écrit dans le fichier'246\n'

shell

49/52

Page 302: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>>

f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 303: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')

Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 304: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 305: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>>

f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 306: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')

Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 307: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 308: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>>

f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 309: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')

>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 310: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>>

f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 311: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()

>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 312: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>>

f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 313: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()

Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 314: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.

50/52

Page 315: Programmation impérative en Python 3 — Cours 6. Exceptions

Les exceptions liées aux fichiers Partie vi. E/S : Lire

▶ Si le fichier n’existe pas.

>>> f_in = open('complot.py', 'r', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

FileNotFoundError: [Errno 2] No such file or directory: 'complot.py'

shell

▶ S’il n’y a pas les permissions pour modifier le fichier.

>>> f_in = open('lecture_seule.txt', 'w', encoding = 'utf-8')Traceback (most recent call last):File "<console>", line 1, in <module>

PermissionError: [Errno 13] Permission denied: 'lecture_seule.txt'

shell

▶ Si le descripteur de fichier a été fermé.

>>> f_in = open('table5.txt', 'r', encoding = 'utf-8')>>> f_in.close()>>> f_in.read()Traceback (most recent call last):File "<console>", line 1, in <module>

ValueError: I/O operation on closed file.

shell

▶ etc.50/52

Page 316: Programmation impérative en Python 3 — Cours 6. Exceptions

Résumé sur les fichiers texte Partie vi. E/S : Lire

▶ Ouverture en lecture (read) :

f_in = open('fichier.txt', 'r', encoding='utf-8') scRipt

▶ Ouverture en écriture (write ou add) :

f_out = open('fichier.txt', 'w', encoding='utf-8') scRipt

ou

f_out = open('fichier.txt', 'a', encoding='utf-8') scRipt

▶ Lecture :▶ f_in.read() ♥▶ f_in.readline()▶ f_in.readlines()▶ for ligne in f_in: ♥

▶ Écriture :▶ f_out.write(chaîne)

▶ Fermeture :

f.close() scRipt

51/52

Page 317: Programmation impérative en Python 3 — Cours 6. Exceptions

Résumé sur les fichiers texte Partie vi. E/S : Lire

▶ Ouverture en lecture (read) :

f_in = open('fichier.txt', 'r', encoding='utf-8') scRipt

▶ Ouverture en écriture (write ou add) :

f_out = open('fichier.txt', 'w', encoding='utf-8') scRipt

ou

f_out = open('fichier.txt', 'a', encoding='utf-8') scRipt

▶ Lecture :▶ f_in.read() ♥▶ f_in.readline()▶ f_in.readlines()▶ for ligne in f_in: ♥

▶ Écriture :▶ f_out.write(chaîne)

▶ Fermeture :

f.close() scRipt

51/52

Page 318: Programmation impérative en Python 3 — Cours 6. Exceptions

Résumé sur les fichiers texte Partie vi. E/S : Lire

▶ Ouverture en lecture (read) :

f_in = open('fichier.txt', 'r', encoding='utf-8') scRipt

▶ Ouverture en écriture (write ou add) :

f_out = open('fichier.txt', 'w', encoding='utf-8') scRipt

ou

f_out = open('fichier.txt', 'a', encoding='utf-8') scRipt

▶ Lecture :▶ f_in.read() ♥▶ f_in.readline()▶ f_in.readlines()▶ for ligne in f_in: ♥

▶ Écriture :▶ f_out.write(chaîne)

▶ Fermeture :

f.close() scRipt

51/52

Page 319: Programmation impérative en Python 3 — Cours 6. Exceptions

Résumé sur les fichiers texte Partie vi. E/S : Lire

▶ Ouverture en lecture (read) :

f_in = open('fichier.txt', 'r', encoding='utf-8') scRipt

▶ Ouverture en écriture (write ou add) :

f_out = open('fichier.txt', 'w', encoding='utf-8') scRipt

ou

f_out = open('fichier.txt', 'a', encoding='utf-8') scRipt

▶ Lecture :▶ f_in.read() ♥▶ f_in.readline()▶ f_in.readlines()▶ for ligne in f_in: ♥

▶ Écriture :▶ f_out.write(chaîne)

▶ Fermeture :

f.close() scRipt

51/52

Page 320: Programmation impérative en Python 3 — Cours 6. Exceptions

Résumé sur les fichiers texte Partie vi. E/S : Lire

▶ Ouverture en lecture (read) :

f_in = open('fichier.txt', 'r', encoding='utf-8') scRipt

▶ Ouverture en écriture (write ou add) :

f_out = open('fichier.txt', 'w', encoding='utf-8') scRipt

ou

f_out = open('fichier.txt', 'a', encoding='utf-8') scRipt

▶ Lecture :▶ f_in.read() ♥▶ f_in.readline()▶ f_in.readlines()▶ for ligne in f_in: ♥

▶ Écriture :▶ f_out.write(chaîne)

▶ Fermeture :

f.close() scRipt

51/52

Page 321: Programmation impérative en Python 3 — Cours 6. Exceptions

Merci pour votre attentionQuestions

?52/52

Page 322: Programmation impérative en Python 3 — Cours 6. Exceptions

Cours 6 — Exceptions et Fichiers

Test sur Moodle cette semaine

F Partie i. Exceptions

Exceptions

Erreurs et trace d’exécution

Éviter les exceptions

Rattraper les exceptions

Un premier exemple : la fonction record

Exemple : la fonction index

Exemple : la fonction recherche

Exemple : Calcul de la moyenne

Exemple : reconnaître un nombre dans unechaîne

F Partie ii. Lancer des exceptions

Lever une exception : assert

La Zénitude

Tester son code avec assert

Lever une exception : raise

Jeu des sept erreurs

Exceptions longue distance

F Partie iii. Compléments sur les chaînes

Chaînes de formatage

Formatage avancé : flottant

Formatage avancé : alignement

Découper une ligne de texte

F Partie iv. Systèmes de fichier

Utilité des fichiers

Un peu d’histoire

Système de fichiers

Arborescence

Chemins relatifs et absolus

Le répertoire courant et le module os

Chemins et chaînes de caractères

Quelques fonctions utiles du module os

F Partie v. E/S : écrire dans un fichier

Entrées/Sorties (E/S)

Ouverture d’un fichier en écriture

Écriture dans un fichier

Formater les écritures

Exemple : générer une table de multiplication

Exemple : générer une jolie table demultiplication

Écrire à la fin d’un fichier

F Partie vi. E/S : lire dans un fichier

Lecture d’un fichier : read

Lecture d’un fichier : readline

Lecture d’un fichier : for

Lecture d’un fichier : readlines

Lire, écrire, compter : objectifs

Lire, écrire, compter : construire aléa.txt

Lire, écrire, compter : générer somme.txt

Lire, écrire, compter : explications

Les exceptions liées aux fichiers

Résumé sur les fichiers texte

F Partie vii. Table des matières