python 赋值前引用的电报机器人局部变量
python telegram bot local variable referenced before assignment
我正在尝试编写一个代码,其中将包含与机器人的对话和将导致机器人发送图像的命令,但我总是遇到相同的错误
这些是部分代码。
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger()
from telegram import (ReplyKeyboardMarkup, ReplyKeyboardRemove)
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
ConversationHandler)
from telegram.ext import Updater
updater = Updater(token='Token', use_context=True)
dispatcher = updater.dispatcher
from telegram.ext import CommandHandler
import telegram
bot = telegram.Bot('Token')
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
def sic(update, context):
chat_id=update.effective_chat.id
file = r"C:\Users\Yoav\Desktop\sicily_bot\user_photo.jpg"
bot.send_photo(chat_id, photo=open(file, 'rb'))
bot.send_photo(chat_id, 'https://bitcoin.org/img/icons/opengraph.png')
def main():
updater = Updater("Token", use_context=True)
dp = updater.dispatcher
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
LOOKS: [MessageHandler(Filters.regex('^(Mehh|Okay.|Great|Amazing)$'), looks)],
PHOTO: [MessageHandler(Filters.photo, photo),
CommandHandler('skip', skip_photo)],
EDUCATION: [MessageHandler(Filters.text & ~Filters.command, education),
CommandHandler('skip', skip_education)],
BIO: [MessageHandler(Filters.text & ~Filters.command, bio)]
},
fallbacks=[CommandHandler('cancel', cancel)],
)
dp.add_handler(conv_handler)
dispatcher.add_handler(sic)
sic = CommandHandler('sic', sic)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我总是遇到这个错误:
Traceback (most recent call last):
File "C:\Users\Yoav\Desktop\sicily_bot\bot_comb.py", line 161, in <module>
main()
File "C:\Users\Yoav\Desktop\sicily_bot\bot_comb.py", line 151, in main
dispatcher.add_handler(sic)
UnboundLocalError: local variable 'sic' referenced before assignment
我该如何解决这个问题?
提前致谢
嗯,你为什么不交换 dispatcher.add_handler 和 sic = CommandHandler 的那一行?
sic = CommandHandler('sic', sic)
您打算使用此行来覆盖 sic
函数吗?
如果你想重写这个函数,你应该将sic
标记为一个全局变量:
[选项 1]
def main():
global sic
... # same as original
如果这不是您的意图,请不要分配给 sic
。我不知道电报库,但我的猜测是 CommandHandler
对象应该传递给 dispatcher.add_handler
。这意味着您应该将代码更改为:
[选项 2]
dispatcher.add_handler(CommandHandler('sic', sic))
我正在尝试编写一个代码,其中将包含与机器人的对话和将导致机器人发送图像的命令,但我总是遇到相同的错误
这些是部分代码。
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger()
from telegram import (ReplyKeyboardMarkup, ReplyKeyboardRemove)
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
ConversationHandler)
from telegram.ext import Updater
updater = Updater(token='Token', use_context=True)
dispatcher = updater.dispatcher
from telegram.ext import CommandHandler
import telegram
bot = telegram.Bot('Token')
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
def sic(update, context):
chat_id=update.effective_chat.id
file = r"C:\Users\Yoav\Desktop\sicily_bot\user_photo.jpg"
bot.send_photo(chat_id, photo=open(file, 'rb'))
bot.send_photo(chat_id, 'https://bitcoin.org/img/icons/opengraph.png')
def main():
updater = Updater("Token", use_context=True)
dp = updater.dispatcher
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
LOOKS: [MessageHandler(Filters.regex('^(Mehh|Okay.|Great|Amazing)$'), looks)],
PHOTO: [MessageHandler(Filters.photo, photo),
CommandHandler('skip', skip_photo)],
EDUCATION: [MessageHandler(Filters.text & ~Filters.command, education),
CommandHandler('skip', skip_education)],
BIO: [MessageHandler(Filters.text & ~Filters.command, bio)]
},
fallbacks=[CommandHandler('cancel', cancel)],
)
dp.add_handler(conv_handler)
dispatcher.add_handler(sic)
sic = CommandHandler('sic', sic)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我总是遇到这个错误:
Traceback (most recent call last):
File "C:\Users\Yoav\Desktop\sicily_bot\bot_comb.py", line 161, in <module>
main()
File "C:\Users\Yoav\Desktop\sicily_bot\bot_comb.py", line 151, in main
dispatcher.add_handler(sic)
UnboundLocalError: local variable 'sic' referenced before assignment
我该如何解决这个问题?
提前致谢
嗯,你为什么不交换 dispatcher.add_handler 和 sic = CommandHandler 的那一行?
sic = CommandHandler('sic', sic)
您打算使用此行来覆盖 sic
函数吗?
如果你想重写这个函数,你应该将sic
标记为一个全局变量:
[选项 1]
def main():
global sic
... # same as original
如果这不是您的意图,请不要分配给 sic
。我不知道电报库,但我的猜测是 CommandHandler
对象应该传递给 dispatcher.add_handler
。这意味着您应该将代码更改为:
[选项 2]
dispatcher.add_handler(CommandHandler('sic', sic))