如何将变量传递给不同的函数(ConversationHandler 中的不同阶段?)
How to pass a variable to a different function (a different stage in ConversationHandler?)
所以我有一个机器人,它使用阶段名称作为每个功能的 return 的乘积从一个阶段移动到另一个阶段。
例如
STEP_1, STEP_2, STEP_3 = range(3)
def askforfile(update, context):
chat_id = update.message.chat_id
context.bot.send_message(chat_id=chat_id, text="give a file!")
return STEP_1
def getfile(update, context):
chat_id = update.message.chat_id
filename = 'newfile'+str(chat_id)+ '.txt'
f = open(filename, 'wb')
context.bot.get_file(update.message.document.file_id).download(out=f)
f.close()
return STEP_2
def get_info(update, context):
chat_id = update.message.chat_id
info = update.message.text
return STEP_3
def end(update, context):
with open(filename, 'rb') as f:
writecsv1 = some_module.some_function(filename, info)
with open(writecsv1, 'rb') as doc:
context.bot.send_document(chat_id=chat_id, document=doc)
return ConversationHandler.END
所以在 end() 函数中,我需要从 some_function 中的函数 getfile() 和 get_info() 传递变量。但我不知道该怎么做,因为 returning 多个值对我不起作用,即使它起作用,显然我不能调用函数。
您可以使用在您的函数中重写的全局变量文件名和信息(也许不要将它们命名为)。只需在函数定义之上使用一些默认值来定义它们。现在它们只是在本地定义,一旦函数 returns.
就消失了
我强烈建议不要使用全局变量。全局变量通常被认为是不好的实践,在这种情况下,当多个用户同时使用您的机器人并且每个用户都覆盖全局变量时,它们很容易让您陷入麻烦。 python-telegram-bot
附带一个 built-in solution 用于在内存中存储数据。我建议利用它。
免责声明:我目前是 python-telegram-bot
.
的维护者
所以我有一个机器人,它使用阶段名称作为每个功能的 return 的乘积从一个阶段移动到另一个阶段。 例如
STEP_1, STEP_2, STEP_3 = range(3)
def askforfile(update, context):
chat_id = update.message.chat_id
context.bot.send_message(chat_id=chat_id, text="give a file!")
return STEP_1
def getfile(update, context):
chat_id = update.message.chat_id
filename = 'newfile'+str(chat_id)+ '.txt'
f = open(filename, 'wb')
context.bot.get_file(update.message.document.file_id).download(out=f)
f.close()
return STEP_2
def get_info(update, context):
chat_id = update.message.chat_id
info = update.message.text
return STEP_3
def end(update, context):
with open(filename, 'rb') as f:
writecsv1 = some_module.some_function(filename, info)
with open(writecsv1, 'rb') as doc:
context.bot.send_document(chat_id=chat_id, document=doc)
return ConversationHandler.END
所以在 end() 函数中,我需要从 some_function 中的函数 getfile() 和 get_info() 传递变量。但我不知道该怎么做,因为 returning 多个值对我不起作用,即使它起作用,显然我不能调用函数。
您可以使用在您的函数中重写的全局变量文件名和信息(也许不要将它们命名为)。只需在函数定义之上使用一些默认值来定义它们。现在它们只是在本地定义,一旦函数 returns.
就消失了我强烈建议不要使用全局变量。全局变量通常被认为是不好的实践,在这种情况下,当多个用户同时使用您的机器人并且每个用户都覆盖全局变量时,它们很容易让您陷入麻烦。 python-telegram-bot
附带一个 built-in solution 用于在内存中存储数据。我建议利用它。
免责声明:我目前是 python-telegram-bot
.