Python 2.7 未能在Pycipper中缩放-类型错误:';零';对象是不可编辑的
我刚刚遇到了一个Python 2.7 未能在Pycipper中缩放-类型错误:';零';对象是不可编辑的,python-2.7,python-3.x,sympy,pyclipper,Python 2.7,Python 3.x,Sympy,Pyclipper,我刚刚遇到了一个TypeError我以前从未见过,也不知道为什么会发生。搜索错误TypeError:“Zero”对象不可编辑不会返回任何结果。我在Python2.7和3.5中进行了测试,两种情况下的错误都是相同的 以下是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_
TypeError
我以前从未见过,也不知道为什么会发生。搜索错误TypeError:“Zero”对象不可编辑
不会返回任何结果。我在Python2.7和3.5中进行了测试,两种情况下的错误都是相同的
以下是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
回溯(最近一次呼叫最后一次):
文件“C:\Users\Jamie\\mcve.py”,第10行,在
失败=pc.scale\u to\u clipper(新\u列表)
文件“pyclipper/pyclipper.pyx”,第544行,在pyclipper.scale_to_clipper(pyclipper/pyclipper.cpp:3535)中
文件“pyclipper/pyclipper.pyx”,第542行,在pyclipper.scale_到_clipper.scale_值(pyclipper/pyclipper.cpp:3454)中
文件“pyclipper/pyclipper.pyx”,第542行,在pyclipper.scale_到_clipper.scale_值(pyclipper/pyclipper.cpp:3454)中
文件“pyclipper/pyclipper.pyx”,第542行,在pyclipper.scale_到_clipper.scale_值(pyclipper/pyclipper.cpp:3416)中
TypeError:“零”对象不可编辑
有人知道此错误的来源和解决方案吗?这已在PyClipper 1.0.2版中修复,这比使用下面描述的解决方法更可取 好的,我已将问题追溯到存储在
Polygon
中的值。问题是值0
由Symphy存储为Symphy.Zero
polyclipper.scale\u to\u clipper()
不接受这些sympy.Zero
值,因此选中时会导致TypeError
为了避免这个问题,我可以生成new_list
castingpt.x
和pt.y
到float
:
new_list = [(float(pt.x), float(pt.y)) for pt in as_poly.vertices]
断言通过还是失败?在分配到
新列表
和失败到缩放
之间是否还有代码行?Prollynew\u list
被修改断言通过,并且确切的MCVE产生错误。不需要额外的代码来重现该问题。正如您已经发现的,问题是pyclipper
认为sym.Zero
是一个集合。这是图书馆里的一个错误。当这个代码被固定转换为<代码> Sy.0/<代码> <代码> int <代码>或<代码>浮点(它被转换成C++双)似乎是一个有效的解决方案。