0

次の関数はAPIに接続し、jsonオブジェクトを返します。それは開発でのみ機能しますが。本番サーバーでは、Falseを返すだけです。

別のサーバーで機能しない理由はありますか?

def request_api(api_call, post_fields, authentication_data = None):
    try:
        log.debug("Connecting To API: " + settings.API_URL + api_call)
        curl = pycurl.Curl()
        curl.setopt(pycurl.URL, settings.API_URL + api_call)
    except:
        log.debug("Can't connect To API: " + settings.API_URL + api_call)
    if post_fields:
        try:
            log.debug("Post Fields: " + post_fields)
            curl.setopt(curl.POSTFIELDS, str(post_fields))
        except:
            log.debug("Error setting post fields.")
    if authentication_data:
        try:
            log.debug("Authentication Fields: " + authentication_data)
            curl.setopt(pycurl.USERPWD, authentication_data)
        except:
            log.debug("Error during authentication.")
    try:
        contents = StringIO.StringIO()
        curl.setopt(pycurl.WRITEFUNCTION, contents.write)
        curl.perform()
    except:
        log.debug("Error on curl.")
    try:
        responseCode = curl.getinfo(pycurl.HTTP_CODE);
        log.debug("Response Code: " + str(responseCode))
    except:
        log.debug("Response Code: Error")
    try:
        log.debug("Response: " + contents.getvalue())
    except:
        log.debug("Response: Error")
    try:
        pyobj = json.loads(contents.getvalue())
        log.debug("Response In Json Format: " + str(pyobj))
    except:
        log.debug("Response In Json Format: Error")
    return pyobj

エラー:

Exception Type:     UnboundLocalError
Exception Value:    

local variable 'pyobj' referenced before assignment

ログファイル:

[18/Sep/2012 04:07:52] DEBUG [contests.views:29] Connecting To API: https://my-api/v1/token
[18/Sep/2012 04:07:52] DEBUG [contests.views:39] Authentication Fields: test@user.com:test@user.com
[18/Sep/2012 04:49:32] DEBUG [contests.views:51] Error on curl.
[18/Sep/2012 04:49:32] DEBUG [contests.views:54] Response Code: 0
[18/Sep/2012 04:49:32] DEBUG [contests.views:58] Response: 
[18/Sep/2012 04:49:32] DEBUG [contests.views:65] Response In Json Format: Error
4

1 に答える 1

2

即時エラーの原因は次のとおりです。

try:
    pyobj = json.loads(contents.getvalue())
    log.debug("Response In Json Format: " + str(pyobj))
except:
    log.debug("Response In Json Format: Error")
return pyobj

ログに表示されているように、try句は失敗しています。これは、pyobj定義されていないことを意味します。関数の最後でそれを行おうとするreturnと、それは存在しないので、を取得しUnboundLocalErrorます。

このセクションが失敗する理由contents.getValueは、クラッシュするか、に不適切なものを渡すことと関係がありjson.loadsます。ただし、すべての例外をキャッチし、役に立たない独自のエラーメッセージを返すため、問題が実際にどこにあるかを理解するのに役立つ関連するトレースバック情報をすべて非表示にしています。トレースバックは、エラーが何であるか、およびエラーが発生した場所をファイルとコード行まで正確に示します。これは、よりもはるかに役立ちますResponse In Json Format: Error

于 2012-09-18T13:17:00.693 に答える