2012-04-23 101 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

相關問題