首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shedskin编译错误

Shedskin编译错误
EN

Stack Overflow用户
提问于 2013-01-08 08:35:26
回答 2查看 256关注 0票数 3

我目前正在尝试用shedskin编译一个python项目(5个文件,总共1200行代码)。

我尝试过shedskin版本0.9.3和0.9.2,结果都是相同的错误。这是我遇到的第一个错误:

代码语言:javascript
复制
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”之前),我收到了许多警告--所有这些都与动态类型有关:

代码语言:javascript
复制
*WARNING* mmain.py: expression has dynamic (sub)type: {float, int, list}

然而,shedskin似乎可以完美地使用所提供的示例,因为我可以编译和执行它们而不会出现任何错误。

您是否知道在哪里查找错误,或者错误与什么相关?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-08 10:06:47

代码语言:javascript
复制
mmain.cpp:133: error: no matching function for call to ‘__shedskin__::list<__shedskin__::list<int>*>::append(__shedskin__::list<double>*)’

这个错误意味着你已经得到了一个Python对象,shedskin已经推断它是ints的list of lists,但是现在你试图附加一些被推断为floats的list的东西。例如,你可以这样做:

代码语言:javascript
复制
a = [[1], [2]]
b = 1.0
a.append([b])

但是,从上面的一行可以看出,函数名是list_comp_3。除非您已经将一个函数实际命名为list_comp_3 (您还没有这样命名),否则这是一种列表理解。因此,您可能正在做这样的事情:

代码语言:javascript
复制
a = [1, 2, 3.0]
b = [[i] for i in a]

你可能想知道为什么它可以让你在a上逃脱,而在b上却失败了。首先,如果你收到了几十个你没有处理过的警告,那么它可能并没有真正让你逃脱惩罚。但第二,正如文档所说:

整数和浮点数通常可以混合在一起,但最好避免这样做,因为它可能会混淆脱皮:

A= 1.0

A= 1 #错误-此处也使用浮点型

至于警告,它们可能意味着任何东西,从“你这次逃脱了,但不要指望总是这样做”,“与此相关的错误即将出现”,“这将被编译,但效率低于原始Python代码,而不是更多”,到“这将被编译,但不正确”。

更广泛地说,听起来你的程序就是不能被shedskin的推理引擎静态类型化。在没有实际看到代码的情况下,不可能告诉您哪里做错了,但是如果您重新阅读the docs的类型限制和Python子集限制部分,应该会让您了解哪些事情是适当的,哪些事情是不适当的。

票数 1
EN

Stack Overflow用户

发布于 2013-01-08 15:06:20

为了避免混淆,请注意'abartert‘提供的两个代码片段在单独编译时都可以很好地编译和运行(shedskin 0.9.3)。我的猜测也是,在解决了动态类型警告之后,这个问题应该会消失。如果没有,我将非常有兴趣看到您正在尝试编译的程序,或者至少有足够的程序来重现问题。

更新:顺便说一句,在0.9.1左右的版本中,shedskin在int和float混合方面应该更聪明一些。如果它遇到会导致c++代码损坏或低效的东西(因为需要进行排序的运行时转换),它现在通常会报错“类型不兼容”的警告。因此,也许是时候为0.9.3稍微更新一下这部分文档了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14206513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档