關(guān)于我成為renpy8升級(jí)受害者這件事附帶debug技巧分享
昨天給之前的養(yǎng)成游戲框架增加了換裝的新代碼,但是每次按重新加載的時(shí)候就會(huì)報(bào)一個(gè)錯(cuò)誤。如下
TypeError [color=var(--black-700)]Cannot pickle 'dict_keys' object
看到錯(cuò)誤先去搜索了錯(cuò)誤信息,獲得了一堆python相關(guān)的。
但是我沒(méi)有仔細(xì)去看,我存了新加的代碼,并用版本管理工具恢復(fù)到了上個(gè)版本,果然重新加載不會(huì)再出錯(cuò)了。
然后我打算一步一步去對(duì)比到底新加的代碼哪里出了問(wèn)題。
在這期間,我發(fā)現(xiàn)老版本不出錯(cuò)的原因是因?yàn)椋习姹緞傞_(kāi)始游戲的時(shí)候是在家里,但是到了商店就會(huì)出錯(cuò)。
并且存檔的時(shí)候也會(huì)報(bào)這個(gè)錯(cuò)誤。
我又看了幾個(gè)之前也用一樣框架的,都有這個(gè)問(wèn)題。
也就是說(shuō)之前那個(gè)商店的也有這個(gè)問(wèn)題。
到這里debug卡住了,不知道該如何繼續(xù)。
我覺(jué)得可能是和renpy相關(guān)的,加上renpy關(guān)鍵字,再次搜索這個(gè)錯(cuò)誤信息。
發(fā)現(xiàn)了幾個(gè)相關(guān)的帖子:
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
看完這個(gè)幾個(gè)帖子,總結(jié)下就是可能是函數(shù)的名字和變量名字起的一樣沖突了。
但是我的函數(shù)都在封裝在類(lèi)里面應(yīng)該不會(huì)有這個(gè)問(wèn)題。
我看錯(cuò)誤是說(shuō)clothing,我還搜索了,并沒(méi)有發(fā)現(xiàn)有什么沖突。
想起來(lái)之前群里有人測(cè)試了之前商店代碼也出現(xiàn)了存檔問(wèn)題,于是想可能是因?yàn)槲疑?jí)了renpy版本,
我把renpy版本降低為7,果然這個(gè)錯(cuò)誤就消失。
renpy7和renpy8的區(qū)別就是python3和python2.7的區(qū)別。
于是不用renpy關(guān)鍵字,直接搜這個(gè)錯(cuò)誤,果然發(fā)現(xiàn)了問(wèn)題。
https://stackoverflow.com/questi ... e-dict-keys-objects
這個(gè)這個(gè)帖子里有解釋?zhuān)褪亲值涞膋eys函數(shù),在python3和python2.7有區(qū)別。
所以修改了Inventory class里的get_items就可以解決問(wèn)題。并且加上注釋?zhuān)〉闹笸涍@里為什么這么寫(xiě)。
修改前:
修改后
這里有一些debug的技巧分享給大家:
(1)
碰到錯(cuò)誤,可以先去搜索錯(cuò)誤信息,可能就可以找到類(lèi)似的問(wèn)題,從而找到解決的辦法。
(2)
用版本管理工具,如果有錯(cuò)誤,可以存一份修改過(guò)的,對(duì)比改之前和改之后的,可能會(huì)發(fā)現(xiàn)問(wèn)題所在。
(3)
有時(shí)候的錯(cuò)誤來(lái)自于不同版本的renpy 引擎,可以退回到之前的版本,再看看有沒(méi)有錯(cuò)誤,如果沒(méi)有,就對(duì)比下這次更新,更新了什么。
(4)
有時(shí)候也可以搜python或者java(安卓)相關(guān)的不一定要帶上renpy關(guān)鍵字。