Я использую блокнот jupyter и пытаюсь создать парсер. У меня есть полностью функциональный класс InputStream, данный мне профессором, который я импортирую. Это релевантная часть myparser.py:
from grammar_stuff import InputStream
I = None
global count
def set_stream(input_stream):
global I
I = input_stream
def prog():
sym = I.pointer()
if sym == '(' or sym in ['x','y','z'] or sym in ['1','2','3','4','5','6','7','8','9']:
sexp()
prog()
elif sym == "":
pass
else:
raise SyntaxError('unexpected symbol {} while parsing'.format(sym))
В коде есть что-то еще, но это не имеет значения. Вот как я называю код:
from grammar_stuff import InputStream
import myparser
I = InputStream(['(','p','y',')'])
prog()
Мой профессор сказал, что мне не нужно импортировать весь myparser, он сказал, что мне нужно только импортировать prog () и set_stream (). Но я решил импортировать все это для вас, ребята, чтобы продемонстрировать, что я все еще получаю ту же ошибкуИ это сообщение об ошибке, которое я получаю:
AttributeError Traceback (most recent call last)
<ipython-input-10-c70c8df299b1> in <module>
2 import myparser
3 I = InputStream(['(','p','y',')'])
----> 4 prog()
~\Python\CSC402\myparser.py in prog()
42
43 def prog():
---> 44 sym = I.pointer()
45 if sym == '(' or sym in ['x','y','z'] or sym in ['1','2','3','4','5','6','7','8','9']:
46 sexp()
AttributeError: 'NoneType' object has no attribute 'pointer'
Если я помещаю код из myparser непосредственно в ячейку ноутбука Jupyter, программа работает нормально. Только когда я помещаю код в файл myparser.py, я больше не могу назначить InputStream для I.