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.

Why this section is failing will have to do with either contents.getValue crashing or passing something inappropriate to json.loads. However, because you are catching all exceptions and returning your own less than helpful error messages, you are hiding all of the relevant traceback information that would help you realise where the problem really lies. The traceback will tell you exactly what the error is and where it occurred down to the file & line of code, which will be of much more use to you than Response In Json Format: Error.

于 2012-09-18T13:17:00.693 回答