Chr*_* B. 12 python python-2.7
我正在访问一个脚本中的环境变量os.environ.get
,它正在抛出一个KeyError
.它不会从Python提示符中抛出错误.它在OS X 10.11.6上运行,并且是Python 2.7.10.
到底是怎么回事?
$ 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')"
$
Run Code Online (Sandbox Code Playgroud)
根据要求,这是源代码 score.py
from __future__ import print_function
from log import get_logger, setup_logging
setup_logging()
log = get_logger('score')
Run Code Online (Sandbox Code Playgroud)
这是 log.py
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)
Run Code Online (Sandbox Code Playgroud)
ele*_*han 11
试试跑步:
find . -name \*.pyc -delete
Run Code Online (Sandbox Code Playgroud)
删除.pyc
文件.
研究你的问题我遇到了这个问题,一个用户遇到了同样的事情:.get()
似乎提出了一个问题KeyError
.在这种情况下,根据这个接受的答案,它是由一个.pyc
文件引起的,该文件包含dict
通过密钥(即mydict['potentially_nonexistent_key']
)访问值的代码,而回溯显示了使用的更新.py
文件中的代码.get()
.我从来没有听说过这样的情况,其中从回溯引用当前代码的.py
文件,而是显示了一个过时的引发错误.pyc
的文件,但它似乎在Python的历史上已经发生至少一次...
这是一个很长的镜头,但值得一试,我想.
小智 7
我在设置环境变量而不导出它时遇到了类似的错误。所以如果你这样做:
me@host:/# NODE_ENV=foo
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
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'
>>>
Run Code Online (Sandbox Code Playgroud)
但如果你这样做:
me@host:/# NODE_ENV=foo
me@host:/# export NODE_ENV
Run Code Online (Sandbox Code Playgroud)
有用:
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
>>>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26733 次 |
最近记录: |