11
votes

Abandonner l'exécution d'un module en python

J'aimerais arrêter l'évaluation d'un module importé, sans arrêter l'ensemble du programme.

Voici un exemple de ce que je veux atteindre: P>

main.py em> p>

main1
 module1
main2


0 commentaires

3 Réponses :


9
votes

Il n'y a pas de bon moyen d'arrêter l'exécution d'un module. Vous pouvez soulever une exception, mais votre module d'importation devra ensuite y faire face. Peut-être juste refacteur comme ceci:

def _my_whole_freaking_module():
    print(' module1')
    some_condition = True
    if some_condition:
        return
    print(' module2')

_my_whole_freaking_module()


8 commentaires

Dans ma situation, le module a besoin de trop de points de sortie. Les conditions ne fonctionneront pas ... J'ai également pensé à ces exceptions, mais j'espère toujours quelque chose de mieux.


Restructurer votre code. Êtes-vous sûr d'avoir même envie de faire plus que de définir des fonctions et des cours de toute façon? Importer un module et avoir des actions complexes pendant l'importation est un peu impair. Voir mon édition.


Je fais un site Web et je souhaite séparer chaque type d'action sur le site Web (par exemple, Projets , blog , forum ) à différents modules. Cela semblait être le meilleur moyen.


@Blaxpirit: Ce n'est pas le meilleur moyen. Vous avez besoin d'une webframework d'une sorte. Je suppose que vous utilisez cgi maintenant? Ne pas. CGI est Braindead.


Je déteste juste ces cadres. Ils me limitaient trop et ne sont pas d'aide. Avec Python 3, je suis libre d'écrire de grands programmes qui utilisent beaucoup unicode


@Blaxpirit: Vous pouvez aussi faire cela avec Python 2. Et tout ce que vous finirez de faire, c'est écrire votre propre cadre de toute façon. Les bons ne vous limiteront pas. Découvrez la pyramide, par exemple.


@Blaxpirit: Je ne suis pas sûr de ce que vous entendez par des cadres qui vous limitent, mais c'est probablement au-delà de la portée de ce fil. Ce que je ne comprends pas, c'est comment sortir tôt d'un module vous aide à structurer votre code Web? Pourquoi avez-vous besoin de sortir tôt?


Vous devriez soulever une exception et laisser le code d'importation traiter. La levée est la seule et unique moyen de partir ici.



2
votes

Vous pouvez envelopper le code de module à l'intérieur de la fonction, comme ceci:

def main():
  print(' module1')
  some_condition=True
  if some_condition:
    return
  print(' module2')

main()


1 commentaires

Un autre problème est que toutes les variables de la principale doivent être déclarées comme globales pour le faire fonctionner comme avant.



5
votes

My Main.py ressemble à ceci, xxx pré>

et my_module.py ressemble à ceci, p>

main 1
module 1
main 2


1 commentaires

C'est la seule solution de python correcte au problème. Merci!