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' 啦!
python执行时遇到 KeyError: b'somevar' 时需要想到的的更多相关文章
- python自带编译器在写入文件时闪退,或者一步步执行到写入时提示8170。解决办法:
用python黑框运行程序写入文件时闪退,或一行行运行到写入时提示8170数字. 经试验,为文件路径错误导致. with open("1.doc", "wb") ...
- 解决Python向MySQL数据库插入中文数据时出现乱码
解决Python向MySQL数据库插入中文数据时出现乱码 先在MySQL命令行中输入如下语句查看结果: 只要character_set_client character_set_database ch ...
- Python源码文件中带有中文时,输出乱码
Python源码文件中带有中文时,文件头应加注释: #!/usr/bin/env python # -*- coding: utf-8 -*- 第一行注释是为了告诉Linux/OS X系统,这是一个P ...
- 在Hive中执行DDL之类的SQL语句时遇到的一个问题
在Hive中执行DDL之类的SQL语句时遇到的一个问题 作者:天齐 遇到的问题如下: hive> create table ehr_base(id string); FAILED: Execut ...
- python踩坑系列之导入包时下划红线及报错“No module named”问题
python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...
- 用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH
用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH 确定环境变量没错,用管理员启动Appium就不会出 ...
- python 执行系统命令模块比较
python 执行系统命令模块比较 1.os.system模块 仅仅在子终端运行命令,返回状态码,0为成功,其他为失败,但是不返回执行结果 如果再命令行下执行,结果直接打印出来 >>> ...
- 使用python执行sql语句和外键解析
一.下载并导入pymysql pip install pymysql && import pymysql db=pymysql.connect(host=) #如果报错host大概率因 ...
- Python执行机制
1.4 Python执行机制 Python中IDLE是其自带的集成开发工具(IDE:同时拥有编辑.编译.调试.运行等多种功能的集成工具),并且它也是Python自带的编译器和解释器. 1.4.1 Py ...
随机推荐
- 在 Linux 上创建虚拟机规模集和部署高度可用的应用
利用虚拟机规模集,可以部署和管理一组相同的.自动缩放的虚拟机. 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率.内存需求或网络流量)进行自动缩放. 在本教程 ...
- Flask 的馈赠
我们在之前用过装饰器 但是在装饰很多函数的时候 那么这些函数的名字都是装饰器内部函数的名字了怎么办呢? django中有functools进行保留你的函数名字保存 flask也可以使用functo ...
- iOS手势处理
iOS手势处理 iOS手势有着如下几种: UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UIS ...
- Redis学习---Redis操作之String
set(name, value, ex=None, px=None, nx=False, xx=False) 在Redis中设置值,默认,不存在则创建,存在则修改 参数: ex,过期时间(秒 ...
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- Elasticsearch 填坑记
前言 技术的发展日新月异,传统企业数据库Oracle.SqlServer.DB2,Mysql等在今日不断的被各种大厂自研数据库取代,当然也有类似Elasticsearch等优秀的满足海量数据所使用的开 ...
- 深入浅出TFS——创建WorkItem
使用场景:在项目交付流程当中,我们在准备部署项目的时候,比如需要依次部署到DEV.QA和PROD共3个不同的环境.我们需要由专门负责部署的部门Integration Team的人员来操作.这个时候我们 ...
- notepad快捷键大全
Notepad++ 快捷键 大全Ctrl+C 复制Ctrl+X 剪切Ctrl+V 粘贴Ctrl+Z 撤消Ctrl+Y 恢复Ctrl+A 全选Ctrl+F 键查找对话框启动Ctrl+H 查找/替换对话框 ...
- NTRIP协议学习(一)
这篇博客讲得很清晰. https://blog.csdn.net/sinat_19447667/article/details/67637167 可以参考的文献包括:<多系统GNSS实时数据质 ...
- Python实现向s3共享存储上传和下载文件
#!/usr/bin/env python #-*- encoding: utf8 -*- import boto import boto.s3.connection from boto.s3.key ...