Quando si tenta un modulo autodidatta, è probabile che finisca con errori nelle prime volte.Come faccio a rendere ipython consapevole delle modifiche apportate a un modulo auto-scritto?
Ma quando si corregge questi errori, ipython sembra non accorgersene.
Esiste un comando ipython per ricaricare il nuovo modulo? 'chiaro' non fa il trucco. Finora, l'unica cosa che funziona è "uscire" e iniziare una nuova sessione. Ma questo significa anche rifare tutto quello che ho fatto finora.
Oppure devo aggiungere qualcosa al modulo che uccide tutte le sue variabili interne dopo che è stato eseguito?
Esempio:
from mymodule import readCSVts
import pandas as pd
data = readCSVts('file.csv')
TypeError Traceback (most recent call last)
<ipython-input-158-8f82f1a78260> in <module>()
----> 1 data = readCSVts('file.csv')
/home/me/path/to/mymodule.py in readCSVts(filename)
194 Cons_NaNs=hydroTS[(hydroTS.level.isnull())&(hydroTS.level.shift().isnull())&(hydroTS.level.shift(periods=2).isnull())]
195 #This is a pandas dataframe containing all rows with NaN
196 Cons_NaNs_count = len(Cons_NaNs)
197 Cons_NaNs_str = str(Cons_NaNs_count)
198 Cons_NaN_Name_joiner = [current_csv,';',Cons_NaNs]
--> 199 Cons_NaN_Name_str = ''.join(Cons_NaN_Name_joiner)
TypeError: sequence item 2: expected string, DataFrame found
OK, che è facile. Ho fatto un errore di battitura nella riga 198 e ho scritto Cons_NaNs
anziché Cons_NaNs_str
, e quindi ottengo l'ovvio errore di provare ad unire un dataframe con una stringa.
Ma dopo aver fissato nel file mymodule.py
, ottengo il seguente (abbreviato) di errore:
197 Cons_NaNs_str = str(Cons_NaNs_count)
198 Cons_NaN_Name_joiner = [current_csv,';',Cons_NaNs_str]
--> 199 Cons_NaN_Name_str = ''.join(Cons_NaN_Name_joiner)
TypeError: sequence item 2: expected string, DataFrame found
Guardando il traceback, ipython è ben consapevole dei cambiamenti è fatto nel file di origine, mostra che ho corretto l'errore con lo _str
mancante, ma dà ancora un errore, che al primo sguardo sembra essere impossibile. Dopo aver eseguito clear
e reimportato tutto, mostra lo stesso comportamento.
Quindi, per essere sicuro di non aver fatto uno stupido errore da qualche parte lungo il percorso, sono andato passo passo attraverso il mio intero modulo in ipython. E ogni variabile che mi porta a quel punto si comporta come previsto.
Cons_NaNs
è un dataframe, Cons_NaNs_count
è un numero intero e Cons_NaNs_str
è una stringa.
Così ho chiuso ipython, lo ho riavviato e reimportato tutto e ora funziona.
Ma dover uscire da ipython fa schifo. Il più delle volte questo significa dover reimportare dozzine di cose e fare alcune dozzine di comandi, per arrivare al punto in cui posso testare su cosa sto lavorando attualmente.
Hai provato ['reload'] (https://docs.python.org/2/library/functions.html#reload)? – jonrsharpe