Je souhaite implémenter des messages d'erreur plus conviviaux si l'utilisateur essaie d'exécuter un script python qui tente d'importer des modules qui n'ont pas été installés. Cela inclut l'impression des instructions sur la façon d'installer le module manquant.Messages d'erreur plus conviviaux lors de l'importation de modules manquants
Une façon de le faire serait de mettre un bloc try..catch autour des importations, mais cela est un peu laid, car il tournerait quelque chose de simple comme
import some_module
dans
try:
import some_module
except ImportError, e:
handle_error(e)
et il devrait être ajouté à chaque fichier. En outre, ImportError ne semble pas stocker le nom du module manquant n'importe où (sauf dans le message), donc vous devriez mettre un try..catch séparé autour de chaque importation si vous avez besoin de connaître le nom (comme je le fais) . L'analyse du nom du module n'est pas une option car le message porté par ImportError peut changer pour la version python en version et en fonction des paramètres régionaux de l'utilisateur. Je suppose que je pourrais utiliser sys.excepthook pour attraper toutes les exceptions et les transmettre sauf ImportError. Ou serait-il possible de définir quelque chose comme
safe_import some_module
qui se comporterait comme je veux?
Est-ce que quelqu'un connaît des solutions existantes à ce problème?
Je pense que ce qui est probablement la meilleure solution proposée. Il ne s'appuie pas sur des «trucs» spéciaux et à cause de cela devrait être assez robuste. En même temps, il ne nécessite aucun changement dans le code source (sauf peut-être en ajoutant le bon chemin à sys.path qui peut être traité facilement). – pafcu