Почему блокнот iPython интерпретирует закомментированные строки?

Этот вопрос не о конкретной ошибке — ошибка возникает из-за того, что я неправильно использую matplotlib tight_layout.

Я хочу знать, почему iPython интерпретирует строку кода, которую я закомментировал, или, скорее, при каких обстоятельствах это может произойти (например, мне нужно перезапустить ядро ​​или что-то еще).

Ошибка, кажется, сохраняется, несмотря на то, что я повторно выполнил соответствующий импорт.

Код:

import forecasting_report.analyze as fcst_rprt
analysis = fcst_rprt.ForecastingReport()
analysis.analyze()
results = analysis.user_dict

Ошибка говорит:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-a62e6e8717be> in <module>()
      1 analysis = fcst_rprt.ForecastingReport()
----> 2 analysis.analyze()
      3 results = analysis.user_dict

/Users/[...]/ForecastingReport/forecasting_report/analyze.py in analyze(self)  
     44         self.breakdown = help.breakdown(self.user_dict)
---> 45         #plots.plot_breakdown(self.breakdown, self.path)
     46 
     47     def write_results(self):

<Error Stack continues>

Примечание:

Совершенно правильный ответ: «Это просто не так». Чтобы быть уверенным, я не пытался воспроизвести эту ошибку в командной строке, так что это может быть просто мое незнание интерпретатора Python.


person BenDundee    schedule 03.05.2013    source источник
comment
вы пытались перезагрузить ноутбук   -  person babalu    schedule 03.05.2013
comment
Да, похоже, это решает проблему. Я просто не знаю, почему оператор import не улавливает изменения в модуле.   -  person BenDundee    schedule 03.05.2013
comment
в прошлом я замечал, что если я устанавливал модуль, он автоматически не становился доступным, требуется перезагрузка.   -  person babalu    schedule 03.05.2013
comment
Python будет импортировать модуль только один раз, если вам нужно перезагрузить его где-то, вы можете использовать: reload(module_name)   -  person Dave Challis    schedule 03.05.2013
comment
@babalu: это верно и для переводчика? Или только блокнот?   -  person BenDundee    schedule 03.05.2013
comment
@DaveChallis: Значит, недостаточно просто перевыпустить оператор import?   -  person BenDundee    schedule 03.05.2013
comment
Да, я считаю, что python увидит, что модуль уже был импортирован, и ничего не сделает, независимо от того, был ли модуль изменен с тех пор.   -  person Dave Challis    schedule 03.05.2013
comment
@DaveChallis: Почему бы вам не опубликовать это как ответ. Пожалуйста :)   -  person BenDundee    schedule 03.05.2013
comment
Нет проблем, готово!   -  person Dave Challis    schedule 04.05.2013


Ответы (2)


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

Чтобы перезагрузить модуль, используйте встроенную функцию reload для уже импортированного модуля. объект, например:

import mymodule

# ...later...
reload(mymodule)
person Dave Challis    schedule 03.05.2013

пытаться

%load_ext autoreload
%autoreload 2

который должен работать с терминалом ipython, я не уверен, работает ли он в ноутбуке ipython. Вы можете просмотреть справку через autoreload? и этот пост: Автозагрузка модулей в IPython

person Shijing Lv    schedule 03.05.2013