You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署Python+Flask发送Telegram消息时视图函数响应异常

Flask视图函数返回无效响应问题解决

在Heroku平台使用Python开发,通过requests库实现Telegram消息发送功能,消息已成功发送,但触发Flask报错,错误信息如下:

TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement

报错栈详情:

Traceback (most recent call last):
2023-01-15T06:01:21.490239+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.10/site-packages/flask/app.py", line 2447, in wsgi_app
2023-01-15T06:01:21.490239+00:00 app[web.1]:     response = self.full_dispatch_request()
2023-01-15T06:01:21.490240+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.10/site-packages/flask/app.py", line 1953, in full_dispatch_request
2023-01-15T06:01:21.490240+00:00 app[web.1]:     return self.finalize_request(rv)
2023-01-15T06:01:21.490241+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.10/site-packages/flask/app.py", line 1968, in finalize_request
2023-01-15T06:01:21.490241+00:00 app[web.1]:     response = self.make_response(rv)
2023-01-15T06:01:21.490241+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.10/site-packages/flask/app.py", line 2097, in make_response
2023-01-15T06:01:21.490242+00:00 app[web.1]:     raise TypeError(
2023-01-15T06:01:21.490242+00:00 app[web.1]: TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.

当前实现代码:

def Send_Message_Telegram(data):
    send_text = f'https://api.telegram.org/bot' + str(config.tgtoken) +\\
    '/sendMessage?chat_id=' + str(config.channel) + '&parse_mode=MarkdownV2&text=' + data

    try:
        print("try")
        response = requests.request("post", send_text)#.status_code
        print("response: {}".format(response))
    except requests.exceptions.RequestException as e:  # This is the correct syntax
        raise SystemExit(e)

问题原因

Flask要求所有视图函数必须返回合法的响应内容,包括响应对象、字符串、JSON数据等,不能返回None或无return语句。你的Send_Message_Telegram作为视图函数,执行完毕后没有任何返回值,触发了这个错误。

修复方案

  1. 给函数添加返回语句,返回符合要求的响应
  2. 优化Telegram API请求方式,避免URL参数拼接的编码问题
  3. 调整异常处理逻辑,避免直接终止程序

修改后的代码示例:

def Send_Message_Telegram(data):
    # 拆分URL和参数,避免拼接问题
    url = f'https://api.telegram.org/bot{str(config.tgtoken)}/sendMessage'
    payload = {
        'chat_id': str(config.channel),
        'parse_mode': 'MarkdownV2',
        'text': data
    }

    try:
        response = requests.post(url, data=payload)
        response.raise_for_status()  # 捕获HTTP状态码错误(如404、500)
        print(f"response: {response}")
        # 返回成功响应,状态码200
        return "消息发送成功", 200
    except requests.exceptions.RequestException as e:
        print(f"消息发送失败: {str(e)}")
        # 返回错误响应,状态码500
        return "消息发送失败", 500

关键修改说明

  • 添加return语句,满足Flask视图函数的响应要求
  • 使用payload传递参数,替代URL拼接,避免特殊字符编码问题
  • 用response.raise_for_status()主动抛出HTTP错误,便于捕获请求异常
  • 异常处理中返回错误状态码,而非直接终止程序,保证Flask服务正常运行

内容的提问来源于stack exchange,提问作者user18569938

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:35:27