zoukankan      html  css  js  c++  java
  • 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' 啦!

  • 相关阅读:
    vue store获取值时 Computed property "activeTag" was assigned to but it has no setter.
    深拷贝实现方法以及问题
    mac 中git操作账号的保存与删除
    解决Ubuntu编译内核uImage出现问题“mkimage” command not found
    ubuntu修改主机名后无法解析主机
    多行宏定义中的注释问题
    uboot启动阶段修改启动参数方法及分析
    ubuntu nfs服务器配置
    mount/umount命令详解
    Ubuntu下vsftp安装和配置
  • 原文地址:https://www.cnblogs.com/sfriend/p/10762507.html
Copyright © 2011-2022 走看看