2017-06-11 17 views
0

私はPythonスクリプトを持っています。 私はこのスクリプトでいくつかの機能を持っていましたが、私はメインスクリプトの横の 'パッケージ'フォルダに移動することに決めました。 このフォルダでは、すべての機能を配置する* .pyファイルを作成しました。 私はこのファイルの近くに、 .pyの空を 'package'フォルダ内に置きました。問題を引き起こす入れ子関数

と私のメインスクリプトのコードを開始:そのファイルからすべての関数を呼び出すときに

from package_folder.my_functions import * 

スクリプトがうまく動作します。

しかし、それを直接インポートしよう:

import package_folder.my_functions  

上記の技術と同様に動作しているようですしません。

原因は、ファイルwellでmy_functions.pyのように、私は、そのファイルで以前に宣言された他のものを必要とする関数を持っているようです。

TypeError: 'NoneType' object is not callable

は、この許容されない場合は、どのようにこのケースを管理するために:
は、私は他のものを必要とするその機能上、このあいまいなエラーが発生しましたか?

+0

'import package_folder.my_functions.func1'を試すことができます。ここで' func1'は 'my_functions.py'ファイル内の関数名です – pramod

+0

ワイルドカードを使用することは本当に良いアイデアではないので、私は尋ねた –

+0

ええ、ワイルドカードのインポートは本当に良いアイデアではないので、 'package_folder.my_functions import func1、func2'のようにしてください。' func1'と 'func2'は' my_functions.py'ファイル内の関数名です – pramod

答えて

0

モジュールimport *で使用することは一般的にはお勧めできません。ワイルドカードのインポートは名前空間の汚染を引き起こします。必要以上に多くの名前をインポートしてしまい、誤ってインポートされた名前を参照した場合、必要なNameErrorを取得できない可能性があります。

また、ライブラリーの将来のバージョンでは、追加の名前を追加した場合、あなたはまだ奇妙なバグにつながる、他の名前をマスキングしてしまう可能性があり:あなたはmy_mod2をアップグレードする場合は、例

from my_mod1 import func1 
from my_mod2 import * 

と1行目のmy_mod1.func1の代わりにmy_mod2.func1が含まれています。

関連する問題