Класс не сохраняется в глобальную переменную, утверждает NoneType - PullRequest
0 голосов
/ 30 сентября 2019

Я использую блокнот 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.

...