-1
votes

Pourquoi est-ce que je reçois une "base de données" NameError: nom "n'est pas défini", même si je définit la principale?

Lorsque j'essaie d'exécuter mon code, je reçois une erreur de nom: xxx pré>

Lorsque je pose la fonction d'assistance en haut, le programme a fonctionné mais je prévois d'utiliser quelques fonctions supplémentaires Donc, je veux les mettre en bas et définir le premier comme principal. J'ai également essayé d'utiliser si __name__ == "__main__": principal () code>, mais cela n'a pas fonctionné non plus. Alors, comment puis-je avoir mes autres fonctions être placées ci-dessous principalement tout en veillant à ce que tout soit défini? P>

from sys import argv, exit
import csv
from collections import OrderedDict

def main():
    if len(argv) != 3:
        print("Usage: python dna.py data.csv sequence.txt")
        exit(1)
    
with open(argv[1]) as csv_file: 
    database = csv.DictReader(csv_file)

    with open(argv[2]) as txt_file: 
        sequence = txt_file.read()
        STR_searcher()
                    
        
def STR_searcher():
    STR_dict = dict.fromkeys(range(1, len(database.fieldnames)))
    for i in range(len(STR_dict)):
        for j in range(len(sequence)):
            print("hello")        
            
main ()


4 commentaires

Je ne pense pas que je comprenne pourquoi vous attendez de la base de la base de données dans principale pour être utilisable à l'intérieur str_searchère . Vous attendez-vous également csv_file et txt_file pour être utilisable là-bas?


"Alors, comment puis-je avoir mes autres fonctions être placées ci-dessous tout en veillant à ce que tout soit défini?" Il semble que vous pensiez que le problème est causé par la définition de principal () avant str_seercher ? Ce n'est pas correct.


@Karlknechtel J'ai commencé à coder il y a 3 semaines et a commencé à utiliser Python il y a 3 jours, alors je suis honnêtement assez confus dans l'ensemble. J'utilisais c avant-ce que j'ai été utilisé pour définir mes variables avant de les utiliser, et mon programme a fonctionné lorsque la fonction str_searcher était au-dessus du reste du programme, c'est pourquoi c'est pourquoi cela ressemblait à c'était le problème pour moi.


Ce que vous essayez de faire ne fonctionnerait pas non plus dans C non plus, peu importe la commande que vous mettez les fonctions dans. Je pense que vous pouvez également avoir mal compris comment "définir tes variables" fonctionne dans C. Le concept général que vous devez comprendre ici est < i> portée variable .


3 Réponses :


1
votes

C'est parce que dans la fonction de fonctionnement de str_searcher () la variable de la base de données n'est pas définie. Pour donner la variable à la fonction, définie comme suit: def str_searcher (base de données): et l'appelez à partir de la fonction principale comme str_searcher (base de données) . .


0 commentaires

0
votes

Ceci se produit parce que votre variable code> code> est définie dans le contexte de votre fonction code> Main code> et de str_searcher code> c'est comme si cela n'existe pas . Envisagez de déplacer cela sur une classe, exemple:

Myclass().main()


0 commentaires

0
votes

Vous devez transmettre les variables à la fonction xxx

ou vous pouvez utiliser le mot-clé global mais ce n'est pas un excellent moyen de le faire. xxx


0 commentaires