Python中f"{a}"与f"{a=}"的输出差异原因及设计逻辑
Python中f'{err=}'与f'{err}'输出差异的原因及设计逻辑
代码示例
try: open('nonexistent') except Exception as err: print(f'{err=}') print(f'{err}')
输出结果
err=FileNotFoundError(2, 'No such file or directory')
[Errno 2] No such file or directory: 'nonexistent'
差异产生的原因
f'{err}'会调用异常对象的__str__()方法,这个方法的作用是生成用户友好、易读的字符串,针对异常来说就是返回贴近用户视角的错误描述,包含具体的出错细节(比如本例中的文件名)。f'{err=}'是Python 3.8新增的表达式格式化语法,它会同时输出变量名和变量的repr()结果(也就是调用对象的__repr__()方法)。__repr__()的核心目标是生成精准、适合调试的字符串,要能清晰还原对象的构造信息,所以会输出异常类的名称和构造参数,方便开发者排查问题。
背后的设计逻辑
这两种格式化方式是为了适配不同的使用场景:
- 如果是面向普通用户展示错误,
f'{err}'的输出更直观,不会暴露底层的代码细节。 - 如果是开发者调试代码,
f'{err=}'能提供更精准的调试信息,直接看到异常的类型和内部参数,快速定位错误根源。而且这种语法简化了调试时“输出变量名+变量值”的操作,不用再手动写f'err={repr(err)}',提升了调试效率。
内容的提问来源于stack exchange,提问作者extremeaxe5
相关产品推荐
相关产品推荐

