虽然这个问题很小,但我觉得很有必要单独拿出来强调一下。

这样在遇到类似错误的时候可以很快反应过来,进而节约了时间。

这里我拿 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' 时需要想到的的更多相关文章

  1. python自带编译器在写入文件时闪退,或者一步步执行到写入时提示8170。解决办法:

    用python黑框运行程序写入文件时闪退,或一行行运行到写入时提示8170数字. 经试验,为文件路径错误导致. with open("1.doc", "wb") ...

  2. 解决Python向MySQL数据库插入中文数据时出现乱码

    解决Python向MySQL数据库插入中文数据时出现乱码 先在MySQL命令行中输入如下语句查看结果: 只要character_set_client character_set_database ch ...

  3. Python源码文件中带有中文时,输出乱码

    Python源码文件中带有中文时,文件头应加注释: #!/usr/bin/env python # -*- coding: utf-8 -*- 第一行注释是为了告诉Linux/OS X系统,这是一个P ...

  4. 在Hive中执行DDL之类的SQL语句时遇到的一个问题

    在Hive中执行DDL之类的SQL语句时遇到的一个问题 作者:天齐 遇到的问题如下: hive> create table ehr_base(id string); FAILED: Execut ...

  5. python踩坑系列之导入包时下划红线及报错“No module named”问题

    python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...

  6. 用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH

    用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH 确定环境变量没错,用管理员启动Appium就不会出 ...

  7. python 执行系统命令模块比较

    python 执行系统命令模块比较 1.os.system模块 仅仅在子终端运行命令,返回状态码,0为成功,其他为失败,但是不返回执行结果 如果再命令行下执行,结果直接打印出来 >>> ...

  8. 使用python执行sql语句和外键解析

    一.下载并导入pymysql pip install pymysql && import pymysql db=pymysql.connect(host=) #如果报错host大概率因 ...

  9. Python执行机制

    1.4 Python执行机制 Python中IDLE是其自带的集成开发工具(IDE:同时拥有编辑.编译.调试.运行等多种功能的集成工具),并且它也是Python自带的编译器和解释器. 1.4.1 Py ...

随机推荐

  1. mvc5中重命名项目的名称后,出现"找到多个与名为“Home”的控制器匹配的类型"

    1.已把项目中所有的Webapplication1改为了MvcMovie,但是运行后,还是报错: 找到多个与名为“Home”的控制器匹配的类型 2.已重新生成解决方安,还是不行. 解决方法:把bin文 ...

  2. springMVC入门-02

    本节会在上节基础上讨论springMVC如何传值的问题. 在添加dispatcherServlet之后,拦截器会将url中的参数拦截下来,使之可以在controller中使用.以下代码就是在前台输入u ...

  3. MySQL 5.7.24 privileges有哪些?

    root@localhost:3306.sock [mysql]>select version();+------------+| version()  |+------------+| 5.7 ...

  4. [翻译] SCViewShaker

    SCViewShaker https://github.com/rFlex/SCViewShaker About A highly configurable UIView category for s ...

  5. Python学习---django-debug-tools安装

    [官网]http://django-debug-toolbar.readthedocs.io/en/1.2/installation.html [更多安装参考]http://blog.csdn.net ...

  6. Office 365 Pass-through身份验证及Seamless Single Sign-On

    Hello 小伙伴们, 这篇文章将视点聚焦在传递身份验证(Pass-through Authentication)上,将分享如何安装,配置和测试Azure Active Directory(Azure ...

  7. Centos下防止ssh暴力破解密码

    参考文章地址:https://yq.aliyun.com/ziliao/48446 https://www.cnblogs.com/lsdb/p/7095288.html 1.收集 /var/log/ ...

  8. NLog写入Mongo日志配置

    Web网站中引入了NLog日志,日志记录在Mongo数据库中,经过两天的简单学习,现简要记录说明下: 首先贴出NLog的学习地址: https://github.com/NLog/NLog/wiki/ ...

  9. Python基础.md

    数据结构 列表 访问 list1 = ['java','C','C++','Python'] In [10]: list1[1] Out[10]: 'C' In [11]: list1[-1] Out ...

  10. 鲜为人知的 Python 语法

    所有人(好吧,不是所有人)都知道 python 是一门用途广泛.易读.而且容易入门的编程语言.   但同时 python 语法也允许我们做一些很奇怪的事情.   使用 lambda 表达式重写多行函数 ...