V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
foveal
V2EX  ›  Python

今天是怎么了。。总遇到神秘的 bug。。。

  •  
  •   foveal · 149 天前 · 2527 次点击
    这是一个创建于 149 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上午是代码中的 try catch catch 不到报错,进程会中断。
    写的是
    ```python
    try:
    xxx
    except Exception as e:
    print(e)
    ```
    可能是某些写法叠加 gunicorn 导致的?


    下午是请求 one-api 的接口,同样的 openai 格式参数,在服务里请求就报错,单独请求就正常。。。

    今天是怎么了?
    第 1 条附言  ·  147 天前
    one-api 接口的问题是我犯傻了。。请求地址不一样都没看出来。

    但是 try
    Traceback (most recent call last):
    File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
    File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/sync.py", line 180, in handle_request
    for item in respiter:
    File "/usr/local/lib/python3.10/site-packages/werkzeug/wsgi.py", line 506, in __next__
    return self._next()
    File "/usr/local/lib/python3.10/site-packages/werkzeug/wrappers/base_response.py", line 45, in _iter_encoded
    for item in iterable:
    File "/app/scenes/medical_base_openai.py", line 37, in chat_completion
    data = context_func(req_data)
    File "/app/scenes/wpa_report.py", line 60, in report_context
    messages[0]['content'] = prompt(messages[0]['content'])
    IndexError: list index out of range
    @zictos 能看到日志,只是分析不出原因。。改成 BaseException 也捕获不了。
    程序简化一下大概是长这样:
    import copy
    import os
    from requests import Session
    from loguru import logger
    import openai
    class B(object):
    def child_function(self,num):
    raise Exception('here')
    class A(B):
    def parent_function(self,num,child_function):
    return self.child_function(num)
    def main(self,num):
    try:
    ret = self.parent_function(num,child_function)
    except Exception as e:
    logger.error(e)
    ret = 0
    return ret
    A().main(1)

    在 child_function 里面报错,正常是可以捕获的,似乎放到在线服务上就捕捉不到了。。
    10 条回复    2024-07-18 10:01:54 +08:00
    9c04C5dO01Sw5DNL
        1
    9c04C5dO01Sw5DNL  
       149 天前
    公司是不是进了什么脏东西
    zictos
        2
    zictos  
       149 天前 via Android   ❤️ 2
    用 BaseException ,Exception 有些异常无法捕获。
    也可以在命令行执行时将标准错误输出到标准输出中,并将输出重定向到文件,这样如果报错并退出的话最后的错误会写入到文件。同时要使用 python -u ,因为缓存机制可能导致无法重定向到文件
    TimG
        3
    TimG  
       149 天前 via Android
    http 请求的话,不光请求体,也检查下 header ?
    ho121
        5
    ho121  
       149 天前 via Android   ❤️ 1
    @zictos 有些异常一般情况下是不应该捕获的,比如 KeyboardInterrupt 、SystemExit 。
    zictos
        6
    zictos  
       149 天前 via Android
    @ho121 我有时候用 while 循环,每循环一次延时一秒,把延时一秒放在 try 的外面,也可以按 ctrl+c 终止程序。因为 try 里面的代码执行时间很短,延时一秒就相对时间比较长了,大部分时候按 ctrl+c 都不会是在执行 try 里面的代码
    yangzzz
        7
    yangzzz  
       149 天前
    拜拜祖师爷
    009694
        8
    009694  
       149 天前 via iPhone   ❤️ 1
    日志也不贴 代码也不贴 那我们只能建议烧烧香 拜拜佛 祈祷能正常了
    quanqqqq
        9
    quanqqqq  
       148 天前
    @giiiiiithub 找个道士驱驱邪
    dicc
        10
    dicc  
       136 天前
    用 one-api, 贵司干啥的[doge]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2588 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:39 · PVG 14:39 · LAX 22:39 · JFK 01:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.