2012-04-23 13 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の完成版はありません。また、Python 2.7とPython 32ビットをWindows上で再現することはできません(int32は 'int64'ではありません)。これはnumpyやPythonの特定のバージョン、または64ビットPythonに特有のものです。 – agf

+0

私はPython 3.2.2を使用していますが、これはコマンドラインでpython3と入力すると、Pythonがその著作権表示の上に示していることです。 (私はLinuxを使用しています) – makhlaghi

+0

'import sysを追加してください。このスクリプトが実際にどのバージョンで実行されているかを確認するには、コードにprint(sys.version)を実行してください。 – agf

答えて

0

これはknown bugであり、バージョン2.0で修正する必要があります。その間に、古い構文%fが使えます。

+0

に見つかりました。解決方法が見つかったと思います。 Integersでは動作しません。したがって、配列の定義を次のように変更すると、a = np.arange(0,10,1、dtype = "f8")になります。エラーは次のようになっているはずです: 'int'型のオブジェクトのための未知のフォーマットコード 'g'。残念ながら私は自分の質問に答えるのに十分な "評判"がありません! – makhlaghi

+0

@astroboyそれは正しくはありません。 'int32'と同様、numpy 1.6.0でエラーは出ません – agf

0

誰かがあなたにもっと深い答えを与えることができますが、ここでは特別な書式設定を使用している"{0:<12g}".format(i)を使用していると思います。 "\{{0}:<12g\}".format(i)を試してみると、より良い結果が得られるはずです。スラッシュを使用して、{}のものがエスケープされます。これが原因でエラーになります。

+0

この変更により、エラーは次のように変更されます。ValueError:単一の '}'がフォーマット文字列 – makhlaghi

関連する問題