2016-05-04 4 views
2

私は2つのpythonスクリプトを持っています。私は定義したすべての関数を持っています(functions.py)、もう1つはそれらの関数(running_functions.py)を実行します。 私はfrom functions import*Python。関数をインポートしてから変更します。後で同じPythonセッションでエラーを返します

私の問題は、私が最初にexecfile('running_functions.py')を使ってPythonコンソールにrunning_functionsを実行したときに魔法のように働いているが、私はPythonのセッションを閉じて、いくつかをしない場合を使用してrunning_functionsスクリプトに関数をインポートfunctions.py(例えば、getLabels()(4から5まで))のパラメータの数を変更して保存した後、再度実行しましたrunning_functions.pyと同じコマンドで、またはgetLabels()エラー:

私はPythonのセッションを閉じて、再度 execfile()を実行したり、 functions.pyの名前を変更するか、少しを行う必要があり、それが再び仕事を得るために

>>> 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) 

関数を呼び出す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) 

修正された機能を持つpythonsスクリプト。

これはすべてのコードが約10分か15分かかり、少しのスクリプトがたくさんあるので、これは非常に面倒です。だから、どうすればこのエラーを回避できますか? 私はセッションが終了するたびに閉じたくないので、各関数pickleモジュールで使用したくないです。関数をインポートした方法が間違っていますか?なぜpythonがこのエラーを返すのですか?この愚かな質問に申し訳ありません

+1

Pythonを再起動することを強くお勧めします。インポートしたファイルを編集して変更されたバージョンを使用する方法はありますが、すべてに注意が必要です。 – user2357112

答えて

5

how python imports workをスキミングすることをお勧めします。一般に、from module import *のようなグロブインポートを使用することは悪い習慣と考えられます。透明ではなく、reloadを利用することが難しくなります。

私は、次の操作を実行するようにコードを書き換える推薦:

import functions 

functions.getLabels(...) 

、その後、あなたがgetLabelsか何かを変更した後、あなたは、シェルから次のことを実行できます。

reload(functions) 

とその意志Pythonカーネルを再起動しなくても変更を再インポートすることができます。

+0

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

+0

Woa、ありがとう、トーマスそれは素晴らしい作品 – Jose

関連する問題