Je continue en regardant vite fait ext_backups.py
:
if len(sys.argv) != 2:
print('Need configuration_file_name')
else:
# ... un truc qui s'étale sur 20~30 lignes
Dans ce genre de cas tu peux “économiser” facilement un cran d’indentation en quittant directement le programme (ou la fonction) car tu ne fera rien d’autre dans le cas où aucun argument n’est fourni. Un cran d’indentation c’est pas grand chose, mais quand tu es en a 2 ou 3 qui sont pas super utile, ça donne du code indenté de moulte crans pour pas grand chose … Bref, ça donne un truc comme :
if len(sys.argv) != 2:
print('Need configuration_file_name')
sys.exit(1)
# ... ici le truc qui s'étale sur 20~30 lignes
# (note l'indentation en moins, car si on continue
# c'est bien qu sys.argv == 2, sinon on aurait quitté le programme)
try:
with open(sys.argv[1], 'r') as conf_file:
config = yaml.safe_load(conf_file)
# ... ici un traitement qui s'étale sur 20~30 lignes
except ValueError:
print(' YAML parser failed to read configuration file !')
Deux remarques ici :
→ Ton traitement après avoir chargé config est “indenté” dans le with
… or, une fois que tu as lu le fichier yaml et stocké dans config
, il n’y pas de raison de garder le fichier ouvert plus longtemps. (Meme si tu clos le fichier, la variable config
et son contenu continue d’exister) Tu peux tout à fait dé-indenter ton code d’un cran pour économiser de l’indentation (ça n’a aucun impact sur les perfs ou quoi, c’est surtout cosmétique et pour ne pas donner l’impression à la personne qui te lit qu’il y a une nécessité à garder le fichier ouvert ou quoi …)
→ ton except ValueError
affiche un message à propos du YAML qui aurait une erreur … mais en réalité, ton try/except
englobe vraiment beaucoup de ligne, et il se pourrait tout à fait que ce soit une autre ligne de code qui déclenche une ValueError
. En réalité c’est mieux de mettre un premier try/except uniquement autour des lignes concernées et de vraiment séparer les différentes opérations de ton code : 1) charger le fichier de config ; 2) créer les objets target
et source
; 3) déclencher les actions ; 4) nettoyer les trucs … tout ça nécessite potentiellement une gestion d’erreur et donc des try/except
indépendant (enfin, si c’est pertinent hein)
Bref, pour le morceau dont il est question ça donne:
try:
with open(sys.argv[1], 'r') as conf_file:
config = yaml.safe_load(conf_file)
except ValueError:
print(' YAML parser failed to read configuration file !')
sys.exit(1)
# ... ici un traitement qui s'étale sur 20~30 lignes