Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取未绑定的局部错误:局部变量';x';参考以下作业_Python - Fatal编程技术网

Python 获取未绑定的局部错误:局部变量';x';参考以下作业

Python 获取未绑定的局部错误:局部变量';x';参考以下作业,python,Python,我有一个PythonFlask应用程序正在从另一个应用程序接收webhook。当它收到webhook时,它会通过执行一项任务(查找某人的可用性)并用响应返回web应用程序来进行响应。在发送响应时,我收到一个未绑定的局部错误局部变量“response”,该变量引用于下面的赋值。在该级别调用响应似乎会导致问题。 任何帮助都将不胜感激 from flask import Flask from flask import request from flask import make_response im

我有一个PythonFlask应用程序正在从另一个应用程序接收webhook。当它收到webhook时,它会通过执行一项任务(查找某人的可用性)并用响应返回web应用程序来进行响应。在发送响应时,我收到一个未绑定的局部错误局部变量“response”,该变量引用于下面的赋值。在该级别调用响应似乎会导致问题。 任何帮助都将不胜感激

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