Python 3.12中f-string打印numpy类型显示异常如何解决?
Python 3.12中f-string打印numpy.float64显示类型的解决办法
这是因为Python 3.12对f-string的{x = }格式化语法做了调整——现在它会优先调用对象的__repr__方法,而Python 3.11及之前版本用的是__str__方法。numpy的float64类型,__repr__会输出带类型标识的格式,__str__则直接输出数值,所以出现了差异。
以下是几种解决办法:
显式转换为字符串输出
直接用str()包裹变量,或者不用=格式化语法,直接写数值输出:import numpy x = numpy.sqrt(3) print(f"{str(x) = }") # 或者更简洁的写法: print(f"x = {x}")使用格式化指定符强制数值输出
通过f-string的格式指定符,强制按数值格式打印:import numpy x = numpy.sqrt(3) # 固定小数位格式 print(f"{x = :f}") # 自动保留有效数字(和原输出精度一致) print(f"{x = :g}")全局修改numpy的打印行为
如果希望所有numpy对象的打印都和旧版本一致,可以设置numpy的legacy打印选项:import numpy numpy.set_printoptions(legacy='1.25') x = numpy.sqrt(3) print(f"{x = }")这个设置会让numpy使用旧版的
__repr__输出逻辑,和Python 3.11的效果一致,且全局生效。
内容的提问来源于stack exchange,提问作者emefff
相关产品推荐
相关产品推荐

