Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python AttributeError:「module」オブジェクトに属性「urlopen」がありませんソリューション

urllibモジュールは、requestの方法を変更しました 関数はPython3でアクセスされます。これは、Python 2で行う方法で「urlopen」関数を参照しようとすると、「AttributeError:'module' object has noattribute'urlopen'」エラーが発生することを意味します。 。

このガイドでは、このエラーの意味と、エラーが発生する理由について説明します。このエラーの例を説明しているので、エラーを解決する方法を学ぶことができます。

AttributeError:「module」オブジェクトに属性「urlopen」がありません

「urllib」モジュールは、URLのオープンとWebサイトからのデータの読み取りに関連する多くの機能を提供します。このライブラリを使用するための構文は、Python2とPython3で異なります。

Python 2では、「urlopen」は「urllib」モジュールの一部です。これは、urllib.urlopenを使用してコードにインポートできることを意味します。 Python 3では、「urlopen」は「urllib」メソッド内の「request」モジュールの一部です。

  • Python 2:urllib-> urlopen
  • Python 3:urllib->リクエスト-> urlopen

「request」モジュールには、「urllib」パッケージのWeb要求関数の多くがバンドルされています。属性を含まないモジュールから属性にアクセスしようとすると、AttributeErrorsが発生します。この場合、「urlopen」は「urllib」モジュールの一部ではありません。

シナリオ例

JSONPlaceholderと呼ばれるサービスからデータを取得するプログラムを作成します。このサービスは、例に使用できるダミーデータを提供します。

ID#2の投稿を1つ取得します。開始するには、urllibモジュールをインポートします。

import urllib

このステートメントを使用すると、プログラムの「urllib」モジュール内から関数を使用できます。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

次に、「urlopen」を使用してリクエストを行います。これにより、JSONPlaceholderAPIのエンドポイントからデータを取得できます。

data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2")
contents = data.read()
print(as_json)

このコードは、JSONPlaceholder APIのID#2の投稿のデータを読み取ります。

このコードは、JSON文字列としてフォーマットされたリクエストからの応答を、printステートメントを使用してコンソールに出力します。コードを実行して、何が起こるかを確認します。

Traceback (most recent call last):
  File "main.py", line 4, in <module>
	    data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2")
AttributeError: module 'urllib' has no attribute 'urlopen'

プログラムはエラーを返します。

ソリューション

Python 2構文を使用して、「urlopen」メソッドにアクセスしています。 「urlopen」はPython3の「urllib」の属性ではありません。「urlopen」を「urllib」の属性として参照しているため、プログラムは正しく実行されません。

この問題を解決するには、「urllib」モジュールから「request」モジュールをインポートします。このモジュールには、「urlopen」メソッドが含まれています。

import urllib.request

次に、JSONPlaceholder APIからデータを取得するときにurllib.requestモジュールを参照するように、コードを変更します。

data = urllib.request.urlopen("https://jsonplaceholder.typicode.com/posts/2")
contents = data.read().decode('utf-8')

print(contents)
>

このコードは、呼び出すAPIエンドポイントのコンテンツを読み取ります。コードを実行してみましょう:

{
  "userId": 1,
  "id": 2,
  "title": "qui est esse",
  "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
}

decode()を使用して受信した応答をデコードしました 方法。これを行うと、urlopen()によって返される値を読み取ることができます。 文字列としてのメソッド。

結論

「urlopen」関数はPython3の「urllib」のオブジェクトではありません。この関数にアクセスするには、「urllib.request」をコードにインポートし、urllib.request.urlopen()を参照します。 関数。

これで、プロのようにこのPythonエラーを修正するために必要な知識が得られました!


  1. Pythonモジュールを処理するURL(urllib)

    Python言語は、Webプログラミングに広く使用されています。 Webサイトを閲覧するときは、URLまたはユニフォームリソースロケーターとも呼ばれるWebアドレスを使用します。 Pythonには、URLへの呼び出しを処理し、URLにアクセスした結果を渡すことができるマテリアルが組み込まれています。この記事では、 urllibという名前のモジュールを紹介します。 。このモジュールには、URLから結果を取得するのに役立つさまざまな関数も表示されます。 urllibのインストール Python環境にurllibをインストールするには、pipを使用して以下のコマンドを使用します。 pip inst

  2. Pythonオブジェクトの比較「is」と「==」

    この記事では、オブジェクトの比較について学習します。つまり、演算子と等式演算子の間です。 等式演算子は渡された引数の値を処理しますが、is演算子は引数として渡された2つのオブジェクトの参照を比較します。 等しい場合、引数の演算子の内容はそれらの参照を無視して比較されます。つまり、異なる場所に格納されている同じコンテンツは同一であると見なされますが、演算子の参照を使用する場合は最優先事項です。 次に、以下の実装の概念を観察しましょう- 例 list_1 = ['t','u','t','o','r'] list_