2013-05-02 4 views
1

J'ai une entrée de l'utilisateur et je veux passer en tant que paramètre de nom de fichier de la fonction ouverte. Voilà ce que je l'ai essayé.passage de la chaîne à la fonction ouvrir le fichier en python

filename = input("Enter the name of the file of grades: ") 
file = open(filename, "r") 

Lorsque l'entrée utilisateur est openMe.py une erreur survient,

NameError: name 'openMe' is not defined 

mais quand les entrées utilisateur "openMe.py "il fonctionne très bien je comprends mal pourquoi il en est le cas parce que je pensais que la variable de nom de fichier est une chaîne Toute aide serait appréciée, merci

Répondre

7

utilisation raw_input en Python 2:..

filename = raw_input("Enter the name of the file of grades: ") 

raw_input renvoie une chaîne tandis que input est équivalent à eval(raw_input()).

Comment eval("openMe.py") fonctionne:

Parce que python pense que dans openMe.py, openMe est un objet tout en py est son attribut, il cherche openMe d'abord et si elle est introuvable, l'erreur est soulevée . Si openMe a été trouvé, il recherche cet objet pour l'attribut py.

Exemples:

>>> eval("bar.x") # stops at bar only 
NameError: name 'bar' is not defined 

>>> eval("dict.x") # dict is found but not `x` 
AttributeError: type object 'dict' has no attribute 'x' 
+0

ainsi. simple. Merci – sbru

+1

Pourquoi eval ("openMe.py") dépouille le .py? – Sarien

+0

@Sarien Parce que python pense que dans 'openMe.py',' openMe' est un objet alors que 'py' est son attribut, donc il cherche d'abord' openMe' et s'il n'est pas trouvé alors l'erreur est levée. –

1

Comme dit Ashwini, vous devez utiliser raw_input 2.x python parce input est pris comme essentiellement eval(raw_input()).

La raison pour laquelle input("openMe.py") semble dépouiller le .py à la fin est parce que les tentatives de python pour trouver un objet appelé openMe et l'accès il est attribut .py.

>>> openMe = type('X',(object,),{})() #since you can't attach extra attributes to object instances. 
>>> openMe.py = 42 
>>> filename = input("Enter the name of the file of grades: ") 
Enter the name of the file of grades: openMe.py 
>>> filename 
42 
>>> 
Questions connexes