找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2707|回复: 0

[教程] 关于我成为renpy8升级受害者这件事附带debug技巧分享

[复制链接]
发表于 2022-8-7 03:51:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
昨天给之前的养成游戏框架增加了换装的新代码,但是每次按重新加载的时候就会报一个错误。如下




                               
登录/注册后可看大图

TypeError [color=var(--black-700)]Cannot pickle 'dict_keys' object

看到错误先去搜索了错误信息,获得了一堆python相关的。
但是我没有仔细去看,我存了新加的代码,并用版本管理工具恢复到了上个版本,果然重新加载不会再出错了。
然后我打算一步一步去对比到底新加的代码哪里出了问题。
在这期间,我发现老版本不出错的原因是因为,老版本刚开始游戏的时候是在家里,但是到了商店就会出错。
并且存档的时候也会报这个错误。
我又看了几个之前也用一样框架的,都有这个问题。
也就是说之前那个商店的也有这个问题。

到这里debug卡住了,不知道该如何继续。

我觉得可能是和renpy相关的,加上renpy关键字,再次搜索这个错误信息。


发现了几个相关的帖子:
https://lemmasoft.renai.us/forums/viewtopic.php?t=42496
https://lemmasoft.renai.us/forums/viewtopic.php?t=45672
https://lemmasoft.renai.us/forums/viewtopic.php?t=15606
https://lemmasoft.renai.us/forums/viewtopic.php?t=49192

看完这个几个帖子,总结下就是可能是函数的名字和变量名字起的一样冲突了。
但是我的函数都在封装在类里面应该不会有这个问题。
我看错误是说clothing,我还搜索了,并没有发现有什么冲突。
想起来之前群里有人测试了之前商店代码也出现了存档问题,于是想可能是因为我升级了renpy版本,
我把renpy版本降低为7,果然这个错误就消失。
renpy7和renpy8的区别就是python3和python2.7的区别。
于是不用renpy关键字,直接搜这个错误,果然发现了问题。

https://stackoverflow.com/questi ... e-dict-keys-objects
这个这个帖子里有解释,就是字典的keys函数,在python3和python2.7有区别。
所以修改了Inventory class里的get_items就可以解决问题。并且加上注释,省的之后忘记这里为什么这么写。
修改前:
[RenPy] 纯文本查看 复制代码
# 返回背包里的物品.
        def get_items(self):
            return self.stock.keys()


修改后
[RenPy] 纯文本查看 复制代码
# 返回背包里的物品.
        def get_items(self):
            ## self.stock.keys() 返回一个dict_keys object
            ## 但是这个object会产生一个错误。
            ## TypeError: can't pickle dict_keys objects
            ## 需要手动转换为list
            return list(self.stock.keys())


这里有一些debug的技巧分享给大家:
(1)
碰到错误,可以先去搜索错误信息,可能就可以找到类似的问题,从而找到解决的办法。

(2)
用版本管理工具,如果有错误,可以存一份修改过的,对比改之前和改之后的,可能会发现问题所在。

(3)
有时候的错误来自于不同版本的renpy 引擎,可以退回到之前的版本,再看看有没有错误,如果没有,就对比下这次更新,更新了什么。

(4)
有时候也可以搜python或者java(安卓)相关的不一定要带上renpy关键字。









您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-12-22 20:00 , Processed in 0.193745 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表