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

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

這樣在遇到相似錯誤的時候能夠很快反應過來,進而節約了時間。spa

這裏我拿 shelve 模塊舉例(shelve的做用大體就是把python變量存放到文件中去),相似的問題均可以這樣變通。code

首先咱們建立一個種子文件seed.py:blog

import shelve

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

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

而後咱們建立test.py 文件來使用該db文件。class

import shelve

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

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

重點來了。。。。。import

不少時候咱們並不會這樣直接運行腳本文件,更多的狀況是把該文件做爲腳本,在須要的時候進行調用。。變量

 

舉個栗子:搜索

假設我如今處於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' 啦!

相關文章
相關標籤/搜索