2012-04-12 12 views
4

私は新しいCODETYPEを作成しようとしているが、次のコードは、Python 2.7でうまく動作しますが、Pythonの3.2で、私はエラーを取得する:はTypeError

def newCode(co_argcount = 0, co_nlocals = 0, co_stacksize = 0, co_flags = 0x0000, 
      co_code = bytes(), co_consts =(), co_names =(), co_varnames =(), 
      filename = "<string>", name = "", firstlineno = 0, co_lnotab = bytes(), 
      co_freevars =(), co_cellvars =()): 
    """wrapper for CodeType so that we can remember the synatax""" 
    print(type(co_stacksize)) 
    return types.CodeType(co_argcount, co_nlocals, co_stacksize, 
          co_flags, co_code, co_consts, co_names, co_varnames, 
          filename, name, firstlineno, co_lnotab, co_freevars, co_cellvars) 

使用方法:

return newCode(co_code = code, co_stacksize = size, co_consts = consts) 

デバッグ行は、私がintでco_stacksizeとして送信していることを証明しています...これが機能しないようにPython 3で何が変更されましたか?

編集:

はTypeError:整数はPython 3で

+0

どのようなエラーを得るのですか?完全なエラーメッセージを含むトレースバックを送信します。 – kindall

答えて

2

を要求され、CodeTypeへの第2引数は、キーワードの数である ここでエラーが(私はその前に忘れてしまった理由は分からない)です単なる議論、co_kwonlyargcount。それは追加なので、すべての後の引数は1つの位置だけシフトされます。

私は酸洗コードオブジェクトを可能にするユーティリティモジュールでは、IPythonのコードベースからこれを掘っ:あなたは https://github.com/ipython/ipython/blob/master/IPython/utils/codeutil.py#L32