2016-08-16 19 views
2

私はこれまでに見たことがないTypeErrorを思いつきました。グーグルでエラーTypeError: 'Zero' object is not iterableは結果を返しません。私はPython 2.7と3.5でテストしましたが、エラーはどちらの場合も同じです。pyclipperでスケールできません - TypeError: 'ゼロ'オブジェクトは反復不可能です

はここでMCVEです:

from sympy.geometry.polygon import Polygon 
import pyclipper as pc 

start_list = [(0, 2), (2, 2), (2, 0), (0, 0)] 
scaled = pc.scale_to_clipper(start_list) # this works fine 

as_poly = Polygon(*start_list) 
new_list = [(pt.x, pt.y) for pt in as_poly.vertices] 
assert new_list == start_list # check that the lists are the same (this passes) 

fail_to_scale = pc.scale_to_clipper(new_list) # this fails 

トレースバック:

Traceback (most recent call last): 
    File "C:\Users\Jamie\<blah>\mcve.py", line 10, in <module> 
    fails = pc.scale_to_clipper(new_list) 
    File "pyclipper/pyclipper.pyx", line 544, in pyclipper.scale_to_clipper (pyclipper/pyclipper.cpp:3535) 
    File "pyclipper/pyclipper.pyx", line 542, in pyclipper.scale_to_clipper.scale_value (pyclipper/pyclipper.cpp:3454) 
    File "pyclipper/pyclipper.pyx", line 542, in pyclipper.scale_to_clipper.scale_value (pyclipper/pyclipper.cpp:3454) 
    File "pyclipper/pyclipper.pyx", line 542, in pyclipper.scale_to_clipper.scale_value (pyclipper/pyclipper.cpp:3416) 
TypeError: 'Zero' object is not iterable 

は、このエラーのソースおよびソリューションは何ができるか、誰を知っていますか?

+0

アサーションは合格か不合格いますか? 'new_list'と' fail_to_scale'への代入の間にもう一行のコードがありますか? Prolly 'new_list'が修正されました –

+0

アサーションが成功し、そのMCVEがエラーを生成します。問題を再現するために必要な追加コードはありません。 –

答えて

2

これは

Okを説明回避策を使用することが好ましいPyClipperバージョン1.0.2で修正されたが、私はPolygonに格納された値に戻す問題を追跡してきました。問題は、値0がSymPyによってsympy.Zeroとして保存されていることです。

これらのsympy.Zeroの値はで受け付けていないので、チェックされている場合はTypeErrorになります。私はnew_listfloatpt.xpt.yをキャスト生成することができ、問題を回避するために

new_list = [(float(pt.x), float(pt.y)) for pt in as_poly.vertices] 
+0

あなたがすでに分かっているように、問題は 'pyclipper'は' sym.Zero'がコレクションだと思っていることです。これはライブラリのバグです。これは 'sym.Zero'の' int'または 'float'への固定変換を取得していますが(とにかにC++に変換されます)、有効な解決策のようです。 – greginvm

+1

アップデート:pyclipperの新しいバージョンがリリースされ、この問題が修正されました。 – greginvm

関連する問題