Question

J'ai écrit un programme qui prend dans un flux rss partielle et fournit une pleine, mais il est un cas par cas. La recette pour un site n'est pas la même chose que la recette de l'autre. Alors ce que je fais est de regarder le domaine basename (par exemple ou NYT wsj) et choisissez un module sur cette base. Bien que je dois charger chaque module avant main et une condition logique pour chaque recette.

Ce que je dois est un moyen d'avoir juste les modules individuels dans leur propre dossier respectif et quand je parse le basename url je le veux chercher le module, le charger et prendre des mesures. Je veux donc la base de code principal pour être indépendant des modules. Je veux être en mesure d'ajouter les modules à l'avenir et de ne jamais toucher la partie de code qui interagissent avec eux.

Voici un exemple de code

if "nyt" == feed:
        nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

Comme vous pouvez le voir, j'appelle l'analyseur du module individuel. J'ai beaucoup d'entre eux en fonction de chaque site. Je veux nourrir roseau et être en mesure de rechercher le module, le charger et l'appeler, et si elle n'existe pas un rapport et essayer la méthode par défaut.

Était-ce utile?

La solution

On dirait que vous êtes à la recherche de la fonction __import__ . Cette fonction fait la même chose que la déclaration de import, mais vous permet de passer un nom à l'importation qui ne pourrait être connu lors de l'exécution.

Vous pourriez faire:

parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

Vous voulez prendre des exceptions telles que ImportError.

Autres conseils

Vous pouvez utiliser le diablotin Module .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top