2013-05-02 2 views
1

У меня есть пользовательский ввод, и я хочу передать его как параметр имени файла функции open. Это то, что я пробовал:.Передача строки в функцию открытия файла в python

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

Когда пользовательский ввод openMe.py возникает ошибка,

NameError: name 'openMe' is not defined 

но когда пользователь вводит "openMe.py "он отлично работает я запутался, почему это случай, потому что я думал, что переменная имя файла является строка Любая помощь будет оценена, благодаря

ответ

7

Использование raw_input в Python 2:..

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

raw_input возвращает строку, а input эквивалентно eval(raw_input()).

Как eval("openMe.py") работы:

Потому что питон считает, что в openMe.py, openMe является объектом, а py является его атрибутом, поэтому он ищет openMe первой, и если это не найден, то возникает ошибка , Если openMe был найден, он ищет этот объект для атрибута py.

Примеры:

>>> 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

так. просто. Спасибо – sbru

+1

Почему eval («openMe.py») линяет .py? – Sarien

+0

@Sarien Поскольку python считает, что в 'openMe.py',' openMe' является объектом, в то время как 'py' является его атрибутом, поэтому он сначала ищет' openMe', а если он не найден, возникает ошибка. –

1

Как сказал Ashwini, вы должны использовать raw_input в Python 2.x, поскольку input берется по существу eval(raw_input()).

Причина input("openMe.py") появляется обирать .py в конце, потому что попытки питона найти какой-то объект с именем openMe и доступ к его .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 
>>> 
Смежные вопросы