Python 获取未绑定的局部错误:局部变量';x';参考以下作业
我有一个PythonFlask应用程序正在从另一个应用程序接收webhook。当它收到webhook时,它会通过执行一项任务(查找某人的可用性)并用响应返回web应用程序来进行响应。在发送响应时,我收到一个未绑定的局部错误局部变量“response”,该变量引用于下面的赋值。在该级别调用响应似乎会导致问题。 任何帮助都将不胜感激Python 获取未绑定的局部错误:局部变量';x';参考以下作业,python,Python,我有一个PythonFlask应用程序正在从另一个应用程序接收webhook。当它收到webhook时,它会通过执行一项任务(查找某人的可用性)并用响应返回web应用程序来进行响应。在发送响应时,我收到一个未绑定的局部错误局部变量“response”,该变量引用于下面的赋值。在该级别调用响应似乎会导致问题。 任何帮助都将不胜感激 from flask import Flask from flask import request from flask import make_response im
from flask import Flask
from flask import request
from flask import make_response
import logging
import json
import random
import os
import importlib
import win32com.client
import pywintypes
import datetime
import pythoncom
from gevent.pywsgi import WSGIServer
from gevent import monkey; monkey.patch_all()
import string
pythoncom.CoInitialize()
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s')
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
req = request.get_json(silent=True, force=True)
logger.info("Incoming request: %s", req)
intent = get_intent_from_req(req)
logger.info('Detected intent %s', intent)
if intent == "Check Schedule Next":
pythoncom.CoInitialize()
emailparam = req.get('queryResult').get('parameters').get('email')
datetime1 = req.get('queryResult').get('parameters').get('date-time').get("date_time")
datetime2=datetime1.replace('T',' ')
datetime3=datetime2.replace("-04:00", "")
print(datetime3)
pythoncom.CoInitialize()
class MeetingRoom:
def __init__(self, inputDate, duration, locationMail):
self.inputDate = inputDate
self.oOutlook = win32com.client.Dispatch("Outlook.Application")
self.bookings = self.oOutlook.CreateItem(1)
self.bookings.Start = inputDate
self.bookings.Duration = duration
self.bookings.Subject = 'Follow Up Meeting'
self.bookings.MeetingStatus = 1
self.roomRecipient = self.bookings.Recipients.Add(locationMail)
def checkRoomAvailability(self):
bookingDateTime = datetime.datetime.strptime(self.inputDate, '%Y-%m-%d %H:%M:%S')
self.roomRecipient.resolve
myDate = bookingDateTime.date()
pywintypeDate = pywintypes.Time(myDate)
availabilityInfo = self.roomRecipient.FreeBusy(pywintypeDate, self.bookings.Duration, True)
timeAvailability = []
newTime = pywintypeDate
# print(newTime)
currentTime = datetime.datetime.now()
for isAvailable in availabilityInfo:
# print(newTime, " :: ", isAvailable)
if isAvailable == "0" and newTime > currentTime:
timeAvailability.append(newTime)
newTime = newTime + datetime.timedelta(minutes=self.bookings.Duration)
# print(availabilityInfo)
# for value in timeAvailability:
# print(value)
try:
index = timeAvailability.index(bookingDateTime)
print(emailparam, "is available")
response = {
'fulfillmentText': emailparam
}
# self.bookings.Save()
# self.bookings.Send()
except ValueError:
for timestamp in timeAvailability:
if bookingDateTime <= timestamp:
break
print("I dont see availability for", emailparam, "at", bookingDateTime, " but next available time is ", timestamp)
x = ("I dont see availability for", emailparam, "at", bookingDateTime, " but next available time is ", timestamp)
response = {
'fulfillmentText': x
}
# def bookMeetingRoom():
if __name__ == '__main__':
meetingRoomObj = MeetingRoom(datetime3, 15, emailparam)
meetingRoomObj.checkRoomAvailability()
#response = {
# 'fulfillmentText': emailparam
#}
res = create_response(response)
return res
def get_intent_from_req(req):
try:
intent_name = req['queryResult']['intent']['displayName']
except KeyError:
return None
return intent_name
def get__from_req(req):
try:
intent_name = req['queryResult']['intent']['displayName']
except KeyError:
return None
return intent_name
def create_response(response):
res = json.dumps(response, indent=4)
logger.info(res)
r = make_response(res)
r.headers['Content-Type'] = 'application/json'
return r
if __name__ == '__main__':
LISTEN = ('0.0.0.0',8080)
http_server = WSGIServer( LISTEN, app )
http_server.serve_forever()
从烧瓶导入烧瓶
从烧瓶进口请求
从flask import作出响应
导入日志记录
导入json
随机输入
导入操作系统
导入导入库
导入win32com.client
导入pywintypes
导入日期时间
进口蟒蛇
从gevent.pywsgi导入WSGIServer
从gevent进口猴子;猴子
导入字符串
pythoncom.CoInitialize()
logger=logging.getLogger()
logger.setLevel(logging.INFO)
logging.basicConfig(
级别=logging.INFO,
格式='(asctime)s-%(levelname)s-%(filename)s-%(funcName)s-%(message)s')
app=烧瓶(名称)
@app.route('/webhook',methods=['POST'])
def webhook():
req=request.get_json(silent=True,force=True)
logger.info(“传入请求:%s”,请求)
意向=从需求(req)获取需求意向
logger.info('检测到意图%s',意图)
如果意图==“检查下一步计划”:
pythoncom.CoInitialize()
emailparam=req.get('queryResult').get('parameters').get('email'))
datetime1=req.get('queryResult').get('parameters').get('date-time').get('date\u-time'))
datetime2=datetime1.replace('T','')
datetime3=datetime2.replace(“-04:00”,”)
打印(日期时间3)
pythoncom.CoInitialize()
班级会议室:
定义初始化(self、inputDate、duration、locationMail):
self.inputDate=inputDate
self.oOutlook=win32com.client.Dispatch(“Outlook.Application”)
self.bookings=self.oOutlook.CreateItem(1)
self.bookings.Start=输入日期
self.bookings.Duration=持续时间
self.bookings.Subject='后续会议'
self.bookings.MeetingStatus=1
self.roomRecipient=self.bookings.Recipients.Add(locationMail)
def checkRoomAvailability(自助):
bookingDateTime=datetime.datetime.StrTime(self.inputDate,“%Y-%m-%d%H:%m:%S”)
self.roomRecipient.resolve
myDate=bookingDateTime.date()
pywintypeDate=pywintypes.Time(myDate)
availabilityInfo=self.roomRecipient.FreeBusy(pywintypeDate,self.bookings.Duration,True)
时间可用性=[]
newTime=pywintypeDate
#打印(新时间)
currentTime=datetime.datetime.now()
对于可用性信息中可用的信息:
#打印(新时间,“:”,可用)
如果isAvailable==“0”且newTime>currentTime:
timeAvailability.append(newTime)
newTime=newTime+datetime.timedelta(分钟=self.bookings.Duration)
#打印(可用性信息)
#对于时间价值可用性:
#打印(值)
尝试:
index=timeAvailability.index(bookingDateTime)
打印(emailparam,“可用”)
答复={
“fulfillmentText”:emailparam
}
#self.bookings.Save()
#self.bookings.Send()
除值错误外:
对于timeAvailability中的时间戳:
如果bookingDateTime此行在初始化之前引用了响应
:
res = create_response(response)
可能要确保所有代码路径都初始化响应
变量?解决方案
似乎您在错误的范围内创建了响应
对象,请将其从功能checkRoomAvailability
中删除
在函数checkRoomAvailability
中,创建响应对象后,按如下方式返回它
response = {
'fulfillmentText': x
}
return response #ADD THIS LINE
拆下这些线
if __name__ == '__main__':
meetingRoomObj = MeetingRoom(datetime3, 15, emailparam)
meetingRoomObj.checkRoomAvailability()
然后添加回对象创建,并在创建响应之前调用
meetingRoomObj = MeetingRoom(datetime3, 15, emailparam)
response = meetingRoomObj.checkRoomAvailability()
res = create_response(response)
return res
建议
您对python或scope的工作原理缺乏一些基本的了解,因此我建议您找一位阅读朋友
欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确指定问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您指定的问题。包括整个错误信息,并将代码减少到说明问题所需的最低限度。请详细说明?在if name_uuuu=“\uuuu main”下添加res=create_response(response):?尝试了解决方案,看起来仍然出现局部变量错误。doubel检查缩进,如果仍然存在问题,发布stacktrace