使用.format打印语句会导致错误

时间:2016-12-21 00:03:14

标签: ipython jupyter-notebook

我有以下print声明: -

print("{0:0.2f}% in traing set".format((len(X_train)/(df.index))*100))

其中

X_train = is 70% of sample data(training data)

df.index is RangeIndex(start=0, stop=768, step=1)

当我运行print语句时,我收到错误如下

non-empty format string passed to object.__format__ 

打印声明的答案应为

69.92 in training set
30.08 in test set

我无法纠正此行为。 任何帮助将不胜感激。

巴勒特。

1 个答案:

答案 0 :(得分:0)

如果应该格式化的对象是一个numpy数组,我会收到此错误。 RangeIndex()必须产生类似的东西。

In [82]: "{0:0.2f}% in traing set".format((20/(np.arange(3)))*100)
...
TypeError: non-empty format string passed to object.__format__
In [83]: 

如果我只是给它一个列表,则会出现同样的错误:"{0:0.2f}% in traing set".format([1,2,3])

如果参数只是一个数字,格式化工作正常:

In [83]: "{0:0.2f}% in traing set".format((20/3)*100)
Out[83]: '666.67% in traing set'

使用像列表或数组这样的对象的唯一format说明符是plain str / repr,

In [102]: print("{} in traing set".format((len(X_train)/(np.arange(1,3)))*100))
[ 5000.  2500.] in traing set

===============

在评论中难以阅读代码;最好将其添加为原始问题的编辑(清楚地标记为这样)。以下是我对格式化的猜测:

value1 = len(X_train) 
value2 = len(X_test) 
value3 = len(df.index) 
value4 = (value1/value3)*100 
value5 = (value2/value3)*100 
print("{0:0.2f}% in training set".format(value4)) 
print("{0:0.2f}% in test set".format(value5))

是的,将值的计算与打印格式分开是个好主意。