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

如何在Python logging中捕获ValueError并记录至日志文件?

如何用Python logging捕获输入转换时的ValueError?

要捕获输入非数字时抛出的ValueError并记录到日志文件,核心是用异常捕获机制包裹可能出错的代码,再通过logging模块记录错误信息。你的原代码没有处理异常,导致程序直接崩溃,日志来不及记录错误。

修改后的完整代码

import logging

logging.basicConfig(filename='myapp.log', level=logging.INFO, format='%(asctime)s :: %(levelname)s :: %(message)s')

def sum(x,y):
    return x+y

if __name__ == '__main__':
    try:
        # 把可能抛出异常的输入转换逻辑放进try块
        x = float(input('Enter first number:'))
        y = float(input('Enter second number: '))    
        
        result = sum(x, y)
        # 正常结果用INFO级别记录即可,不要滥用其他级别
        logging.info(f"SUM of the numbers is: {result}")
        
        # 若需要输出DEBUG级日志,需把basicConfig的level改成logging.DEBUG
        # logging.debug(f"SUM of the numbers is: {result}")
        
    except ValueError as e:
        # 记录错误信息,可选两种方式:
        # 1. 仅记录错误描述
        logging.error(f"输入无效:无法将字符串转换为数字,错误信息:{str(e)}")
        # 2. 记录错误描述+完整堆栈跟踪(更适合排查问题)
        # logging.exception("输入转换失败")

关键说明

  • try-except块:必须把float(input())这类可能抛出异常的代码包裹起来,否则程序会直接终止,无法执行日志记录逻辑。
  • 日志级别规范:INFO用于记录正常业务流程,ERROR/CRITICAL用于记录错误,不要用错误级别记录正常计算结果。
  • logging.exception:这个方法会自动捕获当前异常的堆栈信息,写入日志时会附带完整的调用栈,比logging.error更适合调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:05:37