2010-08-11 3 views
0

Я новичок на Python. Я попытался создать класс с именем ic0File.Не могу прочитать файл in__init__

Вот что я получаю, когда я использую его (Python 3.1)

>>> import sys 
>>> sys.path.append('/remote/us01home15/ldagan/python/') 
>>> import ic0File 
>>> a=ic0File.ic0File('as_client/nohpp.ic0') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "ic0File.py", line 7, in __init__ 
    print ("".join(self.lines)) 
NameError: global name 'infile' is not defined 

Код класс:

class ic0File: 
    def __init__(self,filename): 
     self.infile = open(filename, 'r') 
     import sys 
     import re 
     self.lines=self.infile.readlines() #reading the lines 
     print ("".join(self.lines) 

Спасибо,

+0

Я сомневаюсь, что это фактический код. Обновите свой вопрос с помощью фактического кода, создавшего ошибку. Кроме того, какую версию Python вы используете? И какой учебник вы следуете? –

+2

Код, который вы указали, не совсем соответствует вашей ошибке. В частности, строка 7, цитируемая Python, даже не содержит идентификатор 'infile', поэтому это может означать, что вы изменили исходный файл * после * загрузите его в интерпретатор Python с помощью' import ic0File'. Я рекомендую выйти из интерпретатора Python и повторить попытку. –

+0

Действительно, я только что протестировал его, и он отлично работает. – katrielalex

ответ

0

Для перезагрузки модуля (например, если вы изменили код), используйте reload(). В вашем случае:

reload(ic0file) 

В Python 3, reload был перемещен в imp библиотеке:

import imp 
imp.reload(ic0file) 
0

Как и другие пользователи уже указывали, код, который на самом деле поднял это исключение было бы полезно, но мой предположим, что вы пытаетесь получить доступ к атрибуту infileic0File, как если бы это была фактически переменная.

Вы, наверное, написал что-то вроде этого:

self.lines = infile.readlines() #reading the lines 

вместо:

self.lines = self.infile.readlines() #reading the lines 

в одном из методов ic0File. В отличие от других языков, атрибуты объектов не становятся локальными переменными в методах указанного объекта.

Смежные вопросы