首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python os.environ抛出键错误?

Python os.environ抛出键错误?
EN

Stack Overflow用户
提问于 2016-09-01 20:33:48
回答 7查看 85.1K关注 0票数 40

我正在用os.environ.get访问脚本中的一个环境变量,它正在抛出一个KeyError。它不会从Python提示符中抛出错误。这是在OSX10.11.6上运行的,并且是Python2.7.10。

怎么一回事?

代码语言:javascript
复制
$ python score.py
Traceback (most recent call last):
  File "score.py", line 4, in <module>
    setup_logging()
  File "/score/log.py", line 29, in setup_logging
    config = get_config()
  File "/score/log.py", line 11, in get_config
    environment = os.environ.get('NODE_ENV')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'NODE_ENV'
$ python -c "import os; os.environ.get('NODE_ENV')"
$

根据请求,下面是score.py 的源代码

代码语言:javascript
复制
from __future__ import print_function

from log import get_logger, setup_logging
setup_logging()
log = get_logger('score')

log.py ,这里是

代码语言:javascript
复制
import json
import os
import sys

from iron_worker import IronWorker
from logbook import Logger, Processor, NestedSetup, StderrHandler, SyslogHandler

IRON_IO_TASK_ID = IronWorker.task_id()

def get_config():
  environment = os.environ.get('NODE_ENV')
  if environment == 'production':
    filename = '../config/config-production.json'
  elif environment == 'integration':
    filename = '../config/config-integration.json'
  else:
    filename = '../config/config-dev.json'

  with open(filename) as f:
    return json.load(f)

def setup_logging():
  # This defines a remote Syslog handler
  # This will include the TASK ID, if defined
  app_name = 'scoreworker'
  if IRON_IO_TASK_ID:
    app_name += '-' + IRON_IO_TASK_ID

  config = get_config()

  default_log_handler = NestedSetup([
    StderrHandler(),
    SyslogHandler(
      app_name,
      address = (config['host'], config['port']),
      level = 'ERROR',
      bubble = True
    )
  ])
  default_log_handler.push_application()

def get_logger(name):
  return Logger(name)
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-09-01 21:11:34

试着跑:

代码语言:javascript
复制
find . -name \*.pyc -delete

若要删除.pyc文件,请执行以下操作。

在研究您的问题时,我遇到了这个问题,其中一个用户正在经历同样的事情:.get()似乎引发了一个KeyError。在这种情况下,根据这个被接受的答案的说法,这是由一个.pyc文件引起的,该文件包含一个dict值被键访问的代码(即mydict['potentially_nonexistent_key']),而跟踪显示来自使用.get()的更新的.py文件的代码。我从未听说过这种情况,追溯引用来自.py文件的当前代码,但显示了过时的.pyc文件引发的错误,但在Python历史上至少发生过一次.

这是一个长远的机会,但值得一试,我认为。

票数 24
EN

Stack Overflow用户

发布于 2020-05-03 07:32:31

在没有导出环境变量的情况下设置环境变量时,遇到了类似的错误。所以如果你这么做

代码语言:javascript
复制
me@host:/# NODE_ENV=foo

你会得到这个:

代码语言:javascript
复制
me@host:/# python3
Python 3.8.2 (default, Apr 27 2020, 15:53:34) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> node_env = os.environ['NODE_ENV']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/os.py", line 675, in __getitem__
raise KeyError(key) from None
KeyError: 'NODE_ENV'
>>>

但如果你这么做

代码语言:javascript
复制
me@host:/# NODE_ENV=foo
me@host:/# export NODE_ENV

它的作用是:

代码语言:javascript
复制
me@host:/# python3
Python 3.8.2 (default, Apr 27 2020, 15:53:34) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> node_env = os.environ['NODE_ENV']
>>> print(node_env)
foo
>>>
票数 11
EN

Stack Overflow用户

发布于 2019-07-04 12:01:30

命令windows删除.pyc文件:

代码语言:javascript
复制
del /S *.pyc
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39280435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档