python執行時遇到 KeyError: b'somevar' 時需要想到的


雖然這個問題很小,但我覺得很有必要單獨拿出來強調一下。

這樣在遇到類似錯誤的時候可以很快反應過來,進而節約了時間。

這里我拿 shelve 模塊舉例(shelve的作用大致就是把python變量存放到文件中去),類似的問題都可以這樣變通。

首先我們創建一個種子文件seed.py:

import shelve

data = shelve.open('data.db')
data['secret'] = 'hello world'

運行后在腳本文件所在目錄生成了.db文件(這些文件就是存放your 'secret'的文件)

然后我們創建test.py 文件來使用該db文件。

import shelve

data = shelve.open('data.db')
print(data['secret'])

運行后會發現 屏幕顯示 'hello world' 字符串。至此,你之前存儲的 'secret' 就顯示出來了。

重點來了。。。。。

很多時候我們並不會這樣直接運行腳本文件,更多的情況是把該文件作為腳本,在需要的時候進行調用。。

 

舉個栗子:

假設我現在處於dir目錄,我忘記了我的 'secret',我想再次調用 ../test.py 來查看,可以嗎?

運行后發現:

錯誤提示為 鍵錯誤:沒有'secret' 這個鍵。

但是我們知道文件里明明是有的啊,而且剛才我們運行的時候也正確顯示了

很多時候我們就在這里浪費了大把時間。。。 運氣好的話能搜索到類似的文章,然后就開心的解決了。運氣不好的話,,,自己腦補會怎樣吧

 

其實原因就是:當我們運行python腳本的時候,對於python腳本來說,腳本的默認當前目錄 就是 你執行這條運行命令時所在的目錄

 例如:我現在是在dir目錄執行的這個腳本,那么python腳本的當前目錄就在dir目錄,而不是原來的temp目錄

  再細化一些,根據上述腳本,data = shelve.open('data.db') 就不是在temp目錄找'data.db'了,而是在運行該腳本的dir目錄下找'data.db',

  但是該目錄下沒有'data.db',所以會新建db文件,而新建的db文件里自然是沒有'secret'的。

知道了這些,就會瞬間感到豁然開朗,一切謎團都不復存在。

於是愉快的打開dir目錄,果然,發現了新的db文件:

解決方法就是:不要讓python依賴於默認的當前目錄,給它指明絕對路徑,這樣就可以隨時隨地查看你的 'secret' 啦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM