Python AttributeError: 'module' オブジェクトには xxxx という属性がありません。
原因
<スパン この問題の原因は、モジュール名と、参照しているクラスやメソッド、変数の名前が重複していることです。平たく言うと、pythonスクリプト名(モジュール名)と、参照している内容(モジュール内のクラスや変数など)の名前が重複しているため、元の "class-> property/method" の参照意図が "module-> property" の参照意図に分解されてしまうということです。モジュールの下にそのようなプロパティが存在しない場合、このエラーがスローされます。回避策としては、ネーミングを繰り返さないものに変更することです。
インシデント
<スパン 最近、一般の方がscrapyを学んでいます。 small pyは、プログラミング言語の基礎知識を持っている人にとっては、問題なく始められると思いますが、ただ、もっと踏み込むと(このフラグを立てると...)ピタリといきます。というわけで、pythonを学んだことがない私でも、そのままやってみたら、いろいろと不思議な問題が発生しました。以下、記者による問題の報告です。
I
リトルパイは
GetOnePara.py
という静的メソッドを提供するファイルです。
クラス GetOnePara
:
class GetOnePara():
@staticmethod
def getReqUrlDic():
return xxx
そして、このクラスをクローラーコードの冒頭に以下のコードで導入します。うまくいけば、クローラー内でこのクラスの静的メソッドを呼び出すことができます。
import GetOnePara
class GetOneSp(scrapy.Spider):
urlDic = GetOnePara.getReqUrlDic()
little py がコードリファレンスを実行すると、次のようになります。
urlDic = GetOnePara.getReqUrlDic()
この行でエラーが報告されます。AttributeError: 'module' object has no attribute 'getReqUrlDic', which translates to the "module" object does not have the parameter getReqUrlDic.これは、モジュールオブジェクトがパラメータを持たないことを意味します。
ここでリトルパイは、最終的に問題を引き起こす2つのミスを犯しました。
<スパン 1. モジュール名とクラス名が重複しているため、混乱する可能性がある
2. little py は import xxx と from import xxx の違いを理解していない。
モジュールとは何ですか?
<スパン 簡単に言うと、モジュールはPythonのコードを保持するファイルです。 モジュールはPythonのオブジェクトでもあり、バインドやリファレンスのためのランダムな名前属性をもっています。
<スパン (From: http://www.runoob.com/python/python-modules.html)。そして
<スパン import yyyとfrom yyy import xxxの違いは何ですか?
import yyy は yyyy モジュールを導入するもので、名前空間は指定されていません、xxx の下で yyyy モジュールを使用する場合 名前空間を指定する必要があります。 (yyyy.xxxという形式)でないと、認識されません。
from yyy import xxx は yyyy モジュールから xxx の内容を導入するもので、 xxx を使う場合は xxx を直接書けばよい。(ただし、この使い方はあまりお勧めできません。)
python内部でxxxをインポートしており、このxxxがxxx.pyファイルに対応します。モジュールもpythonのオブジェクトなので
little pyの本来の目的は、モジュール下のGetOneParaクラスを通じて、その静的メソッドgetReqUrlDicを参照することでした。 しかし
GetOnePara.getReqUrlDic()
これは、モジュールGetOnePara内の直接的なgetReqUrlDicプロパティ(これは存在しない)を探していると解析されるため、エラーが報告されます。
この問題を全くなくす方法は、モジュール名(=ファイル名)とモジュール内で参照するコンテンツが重複しないようにすることです。モジュールとその中のクラスを区別するために、GetOnePara.pyをfGetOnePara.pyにリネームしてください。また、名前空間(所属するモジュールの名前)を指定するために、GetOneParaクラスの呼び出しコードを修正する必要があります、すなわち。
import GetOnePara
urlDic = GetOnePara.getReqUrlDic() # Module name and class name overlap, plus no explicit space is specified, resulting in parsed results that don't match the actual intent
モジュール名、クラス名、属性名)に変更する。
import fGetOnePara #Modified the module name
urlDic = fGetOnePara.GetOnePara.getReqUrl() # specifies the namespace
関連
-
[解決済み】Pytesseract : "TesseractNotFound Error: tesseract is not installed or it's not in your path", how do I fix this?
-
[解決済み】python flask インポートエラー
-
音声認識を短期間でマスターするためのPythonのナレッジベース
-
[解決済み] ValueErrorです。ブーリアン値のみのDataFrameを渡さなければならない
-
[解決済み] シーボーンプロットでsns.setを使用する場合
-
[解決済み] ImportError: ダイナミックモジュールにinit関数が定義されていない (initfizzbuzz)
-
[解決済み] Python 3でxreadlines()の代わりになるものは何ですか?
-
mkvirtualenv: コマンドのソリューションが見つかりません。
-
[解決済み] IndentationError: 予期せぬインデントエラー
-
[解決済み] Windowsにosモジュールをインストールする方法を教えてください。重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Pytorchで "unsqueeze "は何をするのですか?
-
numpyの使用におけるよくある誤り
-
[解決済み] Pythonでファイルを開くときの'r+'と'a+'の違いは何ですか?重複] [重複] [重複
-
[解決済み] gaierror.の意味を教えてください。[Errno -3] 名前解決の一時的な失敗"
-
[解決済み] Python - AttributeError: 'NoneType' オブジェクトには 'findAll' という属性がありません。
-
[解決済み] Pythonでのファイルのパーミッション変更
-
[解決済み] GridSpec()` を `subplots()` と共に使用する方法
-
python の cv2.warpAffine() と cv2.warpPerspective() のパース処理の比較.
-
[解決済み] numpyのmaxとamaxとmaxの比較
-
[解決済み] FlaskのSECRET_KEYはどこで手に入るのですか?