3

私は現在、shedskinを使用してPythonプロジェクト(5ファイル@合計1200行のコード)をコンパイルしようとしています。

shedskinバージョン0.9.3と0.9.2を試しましたが、どちらも同じエラーになります。これは私が遭遇する最初のエラーです:

mmain.cpp: In function ‘__shedskin__::list<__shedskin__::list<int>*>* __mmain__::list_comp_3(__shedskin__::__ss_int)’:
mmain.cpp:133: error: no matching function for call to ‘__shedskin__::list<__shedskin__::list<int>*>::append(__shedskin__::list<double>*)’

さらに、shedskinを実行した後(つまり、「make」と入力する前)、多くの警告が表示されます。これらはすべて動的タイプに関連しています。

*WARNING* mmain.py: expression has dynamic (sub)type: {float, int, list}

ただし、shedskinは、エラーなしでコンパイルして実行できるため、提供されている例で問題なく動作しているようです。

エラーを探す場所や、エラーが何に関連しているのかがわかりますか?

4

2 に答える 2

1

混乱を避けるために、'abartert' によって提供される両方のコード スニペットは、別々にコンパイルすると正常にコンパイルおよび実行されることに注意してください (shedskin 0.9.3)。私の推測では、動的入力の警告を解決した後、問題は解消されるはずです。そうでない場合は、コンパイルしようとしているプログラム、または少なくとも問題を再現するのに十分なプログラムを確認したいと思います。

更新: ところで、0.9.1 かそこらの時点で、shedskin は int と float の混合についてよりスマートになるはずです。壊れた、または非効率的な C++ コードにつながる何かに遭遇した場合 (実行時にソートの変換が必要なため)、通常は「互換性のない型」の警告が表示されるはずです。そのため、ドキュメントのこの部分を 0.9.3 用に少し更新するときが来たのかもしれません。

于 2013-01-08T07:06:19.967 に答える
1
mmain.cpp:133: error: no matching function for call to ‘__shedskin__::list<__shedskin__::list<int>*>::append(__shedskin__::list<double>*)’

このエラーは、の の として推論された Python オブジェクトを取得したが、 の のshedskinとして推論されたものlistを追加しようとしていることを意味します。たとえば、次のようにして取得できます。listintlistfloat

a = [[1], [2]]
b = 1.0
a.append([b])

ただし、その上の行から、関数名はlist_comp_3. 実際に関数に名前を付けていない限りlist_comp_3(名前を付けていない場合)、これはリスト内包表記です。したがって、次のようなことをしている可能性があります。

a = [1, 2, 3.0]
b = [[i] for i in a]

あなたはなぜそれがあなたを逃げさせたのになぜa失敗したのか疑問に思うかもしれませんb. まず第一に、対処していない警告が何十もある場合は、おそらく本当にそれを回避することはできませんでした. しかし第二に、ドキュメントが言うように:

多くの場合、整数と浮動小数点数を混在させることができますが、Shed Skin を混乱させる可能性があるため、可能な限りこれを避けることをお勧めします。

a = [1.0]

a = 1 # 間違っています - ここでも float を使用してください

警告に関しては、「今回はうまくいきましたが、常にそうなるとは思わないでください」から「これに関連してエラーが発生しています」から「これはコンパイルされますが、それよりも少ないものです」まで、あらゆる意味があります。元の Python コードよりも効率的です」から「これはコンパイルされますが、何かが正しくありません」。

より一般的に言えば、あなたのプログラムは、shedskin の推論エンジンによって静的に型付けできないようです。コードを実際に見ないと、何が間違っているのかを知ることはできませんが、 docsの Typing Restrictions セクションと Python Subset Restrictions セクションを読み直せば、何がどのようなもので、どのようなものであるかについてのアイデアが得られるはずです。適切です。

于 2013-01-08T02:06:46.743 に答える