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' 啦!

相关文章
相关标签/搜索