31

を使用して Requests モジュールをインストールし、このチュートリアルeasy_install のデモ コードを実行しようとしました。

import requests
payload = {'username': 'xxxx', 'password': 'xxxxx'}
r = requests.get('https://github.com/timeline.json')

しかし、私はこのエラーが発生します:

属性エラー:'module' object has no attribute 'get'

4

12 に答える 12

36

これは、関連のないrequests.py(またはrequests.pyc) ファイルが現在のディレクトリ、またはPYTHONPATH. この場合は、本当にインポートしたいモジュールを隠しているため、削除するか名前を変更してください。

于 2012-09-04T08:49:29.810 に答える
19

モジュールからすべての名前をローカルの名前空間にインポートしていrequestsます。つまり、モジュール名を前に付ける必要はありません。

>>> from requests import *
>>> get
<function get at 0x107820b18>

代わりにステートメントを使用してモジュールをインポートする場合はimport requests、モジュール自体を名前空間に追加したことになり、完全な名前を使用する必要があります。

>>> import requests
>>> requests.get
<function get at 0x102e46b18>

上記の例は、インタープリターでのテストから得たものであることに注意してください。異なる結果が得られた場合は、間違ったモジュールをインポートしています。requests.pyPython パッケージに余分なファイルがあるかどうかを確認します。

>>> import requests
>>> print requests.__file__
/private/tmp/requeststest/lib/python2.7/site-packages/requests/__init__.pyc

requestsモジュールによって提供される名前のリストをテストすることもできます。

>>> print dir(requests)
['ConnectionError', 'HTTPError', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', '_oauth', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'defaults', 'delete', 'exceptions', 'get', 'head', 'hooks', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'safe_mode', 'session', 'sessions', 'status_codes', 'structures', 'utils']
于 2012-09-04T07:42:59.163 に答える
18

同じエラーが発生しました。

私がしたのは、それを次のように保存することだけでしたrequests.py

その後、別の名前で保存しました。そして問題は解決しました。

于 2015-04-02T14:37:57.800 に答える
8

すでに述べたように、最も一般的な問題はrequests.pyPYTHONPATH.

しかし、要求モジュールは内部で他のモジュール (標準の python ライブラリなど) を使用するため、他のファイル名にも問題がある可能性があります。たとえば、スクリプトに名前を付けたときに同じ問題が発生しましたhttp.py。その場合、の出力print dir(requests)は正しいため、エラーの追跡が少し難しくなります...

于 2013-05-17T08:49:08.183 に答える
4

これを修正する方法のバリエーションが必要です。

import requests

また

r = get('https://github.com/timeline.json')

PS最初のものが望ましい

于 2012-09-04T07:39:38.333 に答える
1

Django のようなリクエスト オブジェクトを持つフレームワークを使用している場合、これはユーザー エラーである可能性があります。

私は常にDjangoに混乱しています:

request.POST

およびrequest:

request.post

とにかく、それは私の問題でした。反対票のブレース。

于 2013-08-30T19:07:58.987 に答える
0

MacとUbuntuで同じ問題が発生しました。requests コマンドをテストしたい。Mac ではrequests/フォルダー名とrequests.pyファイル名を使用しました。しかし、Python は「ImportError: cannot import name get」というメッセージを表示します。したがって、requests/ フォルダーと requests.py ファイルの名前を test-requests/ と test-requests.py に変更しました。それはまだメッセージを受け取りました。以下のようにフォルダを確認しました。

__pycache__     requests.pyc        test-1.py       test-requests.py

フォルダーに requests.pyc ファイルがあることがわかりました。そのため、フォルダー内の requests.pyc ファイルを削除しました。次に、以下のテストスクリプトを実行しました。それは今働いています。

$ python test-requests.py 
200

#! /usr/bin/env python
# the content of test-requests.py
import requests
from requests import get
r = requests.get('http://httpbin.org/get')
print (r.status_code)
于 2018-04-22T11:29:37.573 に答える