App下載

python報(bào)錯(cuò)lost sys.stdou如何解決?——python文件命名的禁忌!

猿友 2021-06-19 11:38:01 瀏覽數(shù) (5509)
反饋

某日,小編在寫python代碼的時(shí)候,出現(xiàn)了一個(gè)報(bào)錯(cuò):RuntimeError: lost sys.stdout。小編在搜尋解決方案后解決了這個(gè)問題,由此引發(fā)了一個(gè)思考:同類的問題應(yīng)該如何解決和避免。于是就有了接下來的這篇文章。接下來小編就以“python報(bào)錯(cuò)lost sys.stdou如何解決”為例,帶你了解python文件命名的規(guī)范吧。

錯(cuò)誤出現(xiàn)

小編在寫某個(gè)python代碼的時(shí)候,運(yùn)行報(bào)錯(cuò):

報(bào)錯(cuò)

報(bào)錯(cuò)的意思是,丟失?sys.stdout?。然后小編運(yùn)行了該文件夾下的所有代碼,都出現(xiàn)了這樣的報(bào)錯(cuò)。

求助大佬后才知道,我的?io?模塊被替換掉了,然后小編望向自己的項(xiàng)目文件夾,發(fā)現(xiàn)了罪魁禍?zhǔn)祝?/p>

項(xiàng)目文件夾

沒錯(cuò),就是那個(gè)名為?io?的模塊,小編曾經(jīng)圖一時(shí)爽快,把某個(gè)python文件命名為io了,然后他替換了內(nèi)置的?io?模塊,然后所有涉及到?io?模塊的操作都不能使用了。。。

解決方法

既然是名字的問題,那么改掉就可以了,在將那個(gè)文件改了個(gè)名后,我的項(xiàng)目又恢復(fù)了正常運(yùn)行。

由此引發(fā)出的思考

既然改名叫io,?io?模塊就不能運(yùn)行,那么改名叫requests,是不是就不能運(yùn)行?ruquests?模塊了?在一番嘗試后發(fā)現(xiàn)確實(shí)如此。原理很簡(jiǎn)單:python在搜尋包的時(shí)候會(huì)先搜尋項(xiàng)目?jī)?nèi)有沒有該模塊,如果有就用項(xiàng)目?jī)?nèi)的模塊,如果沒有就到稱為sys.path的list中尋找,所有的python自帶的模塊和pip安裝第三方模塊都在這里。

如何避免

根據(jù)上述結(jié)論,我們可以得到一個(gè)很簡(jiǎn)單的避免方法——既然命名和模塊相同會(huì)產(chǎn)生這樣的錯(cuò)誤,那么我們?cè)诿臅r(shí)候只要規(guī)避這些模塊名就不會(huì)出現(xiàn)這樣的錯(cuò)誤。這就引出了python文件命名的規(guī)范——不要用模塊名命名py文件?。?!

小結(jié)

以上就是以“python報(bào)錯(cuò)lost sys.stdou如何解決”為例介紹的python文件命名的規(guī)范。之所以會(huì)出現(xiàn)這樣的原因,小編犯懶是一點(diǎn),但更多的原因是小編不知道這樣的小知識(shí)點(diǎn)。但又是為什么小編會(huì)不知道這樣的小知識(shí)點(diǎn)呢?主要還是因?yàn)樾【幍膒ython只是自學(xué),雖然很多知識(shí)點(diǎn)小編可以從掌握的其他語言中學(xué)習(xí)而來,但是這個(gè)小知識(shí)點(diǎn)小編的確沒遇到過。這就是自學(xué)python的缺陷。W3Cschool上的python編程課有一系列系統(tǒng)全面的學(xué)習(xí)python的課程,讓你少走彎路錯(cuò)路,直走成功大道!

更多精彩內(nèi)容盡在python編程獅。


0 人點(diǎn)贊