2016-05-04 3 views
2

Ich habe zwei Python-Skripts, eines hat alle Funktionen, die ich definiert habe (functions.py) und das andere nur diese Funktionen ausgeführt (running_functions.py). importierte ich die Funktionen in running_functions Skript from functions import*Python. Importieren Sie eine Funktion und ändern Sie sie anschließend. Später gibt Fehler in der gleichen Python-Sitzung

Mein Problem ist, wenn ich running_functions lief in Python Konsole execfile('running_functions.py') zunächst wie ein Charme mit, aber wenn ich nicht schließen, die Python-Sitzung und tun einige ich lief wieder running_functions.py mit demselben comand oder wenn ich getLabels() I genannten Modifikationen in eine Funktion in functions.py (zum Beispiel der Anzahl der Parameter zu ändern, die getLabels() (4 bis 5) haben) gespeichert, und dann anschließend Erhalten Sie den Fehler:

Mit execfile()

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "running_functions.py", line 82, in <module> 
    predict_labels = getLabels(pred_labels, ids_tr ,labels_tr,filenames_tr, filenames_ts) 
TypeError: getLabels() takes exactly 4 arguments (5 given) 

Aufruf der Funktion

>>> predict_labels = getLabels(pred_labels, ids_tr ,labels_tr,filenames_tr, filenames_ts) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: getLabels() takes exactly 4 arguments (5 given) 

es wieder zu bekommen arbeiten ich Python-Sitzung schließen und dann erneut ausführen execfile() oder umbenennen functions.py oder wenig tun Pythons Skripte mit geänderter Funktion.

Dies ist sehr ärgerlich, weil der ganze Code dauert ungefähr 10 oder 15 Minuten und ich mag nicht viele kleine Skripte. Also, wie kann ich diesen Fehler vermeiden? Ich möchte nicht jedes Mal die Sitzung schließen und möchte nicht in jeder Funktion Gurke-Modul verwenden. Ist es falsch, wie ich die Funktionen importiert habe? Und warum Python diesen Fehler zurückgibt? Entschuldigung für diese albernen Fragen

+1

Ich empfehle dringend nur Python neu zu starten. Es gibt Möglichkeiten, die importierten Dateien zu bearbeiten und die geänderten Versionen zu verwenden, aber alle haben Vorbehalte und unordentliche Fälle. – user2357112

Antwort

5

Ich würde empfehlen über how python imports work skimmen. Im Allgemeinen wird es als schlechte Praxis angesehen, Glob-Importe wie from module import * zu verwenden. Es ist nicht transparent und macht es schwierig, reload zu nutzen.

würde ich empfehlen, den Code umschreiben Folgendes zu tun:

import functions 

functions.getLabels(...) 

und dann, nachdem Sie getLabels oder etwas ändern, können Sie von der Shell ausgeführt folgenden:

reload(functions) 

und das wird Importieren Sie Ihre Änderungen erneut, ohne den Python-Kernel neu starten zu müssen.

+0

[Python 3.X: 'importlib.reload'] (https://docs.python.org/3.4/library/importlib.html#importlib.reload) –

+0

Woa, danke, @Thomas es funktioniert super – Jose

Verwandte Themen