如何在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
相关产品推荐
相关产品推荐

