Python; Object is not defined error,i tought i defined it

arknldoa  于 2023-08-08  发布在  Python
关注(0)|答案(3)|浏览(121)

我是python新手,找不到一个可行的解决方案,所以我请求你的帮助
下面是我的代码:

import requests
import json
import sseclient

API_KEY = 'Hidden for reasons'

def performRequestWithStreaming():
    reqUrl = 'https://api.openai.com/v1/completions'
    reqHeaders = {
        'accept':   'text/event-stream',
        'authorization':    'bearer ' + API_KEY
    }
reqBody = {
    "model":    "text-davinci-003",
    "prompt":   "what is python",
    "maxtokens":    100,
    "temperature":  0,
    "stream":   True,
}
request = requests.post(reqUrl, stream=True, headers=reqHeaders, json=reqbody)
client = sseclient.SSEClient(request)
for event in client.events():
    if event.data != 'DONE':
        print(json.loads(event.data)['choices'][0]['text'], end="", flush=True)

if __name__ =='__main__':
    performRequestWithStreaming()

字符串
我得到了错误:

Exception has occurred: NameError
name 'reqUrl' is not defined
  File bot.py", line 20, in <module>
    request = requests.post(reqUrl, stream=True, headers=reqHeaders, json=reqbody)
NameError: name 'reqUrl' is not defined


我试着再次定义它,或者在顶部,尝试在请求API中使用不同的命令,或者将它们创建为对象,但都不起作用

azpvetkf

azpvetkf1#

您必须将reqBody...缩进到print(json.loa...上一级。
正确代码:

import requests
import json
import sseclient

API_KEY = 'Hidden for reasons'

def performRequestWithStreaming():
    reqUrl = 'https://api.openai.com/v1/completions'
    reqHeaders = {
        'accept':   'text/event-stream',
        'authorization':    'bearer ' + API_KEY
    }
    reqBody = {
        "model":    "text-davinci-003",
        "prompt":   "what is python",
        "maxtokens":    100,
        "temperature":  0,
        "stream":   True,
    }
    request = requests.post(reqUrl, stream=True, headers=reqHeaders, json=reqbody)
    client = sseclient.SSEClient(request)
    for event in client.events():
        if event.data != 'DONE':
            print(json.loads(event.data)['choices'][0]['text'], end="", flush=True)

if __name__ =='__main__':
    performRequestWithStreaming()

字符串

toe95027

toe950272#

pyhton不使用{ }来表示代码块,而是在程序中使用缩进,因为
request = requests.post(reqUrl,stream=True,headers=reqHeaders,json=reqbody)没有缩进,它首先被调用,而不是if条件。

mzaanser

mzaanser3#

我不明白你为什么认为这会起作用。很明显,变量reqUrl的级别低于变量request,因此代码不可能工作。你做了一个奇怪的选择,在函数中定义一个变量。你必须全局化变量reqUrl或者在函数performRequestWithStreaming()中定义整个代码。既然你想利用

if __name__=="__main__":
    performRequestWithStreaming()

字符串
最好把所有的代码都放在同一个函数中。下面是正确的代码:

import requests
import json
import sseclient

API_KEY = 'Hidden for reasons'

def performRequestWithStreaming():
    reqUrl = 'https://api.openai.com/v1/completions'
    reqHeaders = {
        'accept':   'text/event-stream',
        'authorization':    'bearer ' + API_KEY
    }
    reqBody = {
        "model":    "text-davinci-003",
        "prompt":   "what is python",
        "maxtokens":    100,
        "temperature":  0,
        "stream":   True,
    }
    request = requests.post(reqUrl, stream=True, headers=reqHeaders, json=reqbody)
    client = sseclient.SSEClient(request)
    for event in client.events():
        if event.data != 'DONE':
            print(json.loads(event.data)['choices'][0]['text'], end="", flush=True)

if __name__ =='__main__':
    performRequestWithStreaming()

相关问题