2012-04-23 102 views
0

我是Python新手,我正在尝试编写一个简单的打印函数,但出现一个奇怪的错误。这是我的代码:ValueError:类型为'str'的对象的未知格式代码'g'

#! /usr/bin/env python3.2 
import numpy as np 

a=np.arange(1,10,1) 
print(a) 
for i in a: 
    print(i) 
    print(type(i)) 
    print("{0:<12g}".format(i)) 

输出是:

[1 2 3 4 5 6 7 8 9] 
1 
<class 'numpy.int64'> 
Traceback (most recent call last): 
    File "./test.py", line 9, in <module> 
    print("{0:<12g}".format(i)) 
ValueError: Unknown format code 'g' for object of type 'str' 

为什么打印采取 “numpy.int64” 作为一个字符串?我必须补充一点,它适用于正常列表:(例如[1,2,3,4])我非常感谢关于此问题的任何想法,谢谢;-)。

+0

你实际上并没有使用Python 3.2,是吗?没有Python 3的numpy的完成版本。另外,我无法在Windows上使用Python 2.7和Python 32位(它们是'int32'而不是'int64')来重现。这可能特定于某个版本的numpy或Python,或特定于64位Python。 – agf 2012-04-23 08:17:52

+0

我正在使用Python 3.2.2,至少这是Python在命令行中输入python3时在其版权声明上方所说的内容! (我正在使用Linux) – makhlaghi 2012-04-23 08:21:06

+0

添加'import sys;打印(sys.version)'到你的代码,看看这个脚本实际运行的版本是什么。 – agf 2012-04-23 08:35:51

回答

0

这是一个known bug,应该在版本2.0中修复。在此期间,您可以使用适用的旧语法%f

+0

我想我找到了解决方法:打印格式中的“g”仅适用于浮动。它不适用于整数。所以当我将数组定义更改为:a = np.arange(0,10,1,dtype =“f8”)它可以工作!错误应该说:'int'类型的对象的未知格式代码'g'。不幸的是我没有足够的“声望”来回答我自己的问题! – makhlaghi 2012-04-23 08:42:22

+0

@astroboy这是不正确的,因为'int32'我没有与numpy 1.6.0错误 – agf 2012-04-23 09:23:25

0

有人可以给你一个更深入的答案,但我认为这里发生的是你正在使用"{0:<12g}".format(i)它使用特殊的格式。如果你想尝试"\{{0}:<12g\}".format(i)你可能会得到更好的结果。使用斜杠可以逃脱{}的错误。

+0

通过此更改,错误更改为:ValueError:在格式字符串中遇到单个'}' – makhlaghi 2012-04-23 08:17:24

相关问题