Python os.environ jette une erreur de clé?

Je suis d'accéder à une variable d'environnement dans un script avec os.environ.get et c'est jeter un KeyError. Il ne jette pas l'erreur de l'interprète Python. C'est en cours d'exécution sur OS X 10.11.6, et est Python 2.7.10.

Ce qui se passe?

$ 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')"
$

Comme demandé, voici le code source pour score.py

from __future__ import print_function

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

Et voici 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)
Pouvez-vous fournir le code pour score.py?
Ne peuvent pas se reproduire...
C'est bizarre. get ne devrait jamais jeter un KeyError; il est censé retourner None si la clé n'est pas trouvé (ou quelle que soit la valeur par défaut que vous avez fournies si vous avez fourni un). Heck, le code source pour cette méthode n'est même pas censé avoir un raise KeyError(key) ligne à tous!
Pourriez-vous être confronté à ceci: stackoverflow.com/a/26906934/3642398? Je ne savais pas ce qui pourrait arriver (stacktrace indiquant le code, mais l'exécution de code de .pyc fichier), mais semble être ce que l'utilisateur est en train de décrire.
Ouais, c'est à quoi il ressemble sur mon local python installer trop (2.7.10). Mais la chose étrange est que UserDict.get (ligne 61 en UserDict.py) doit être dans le traceback -- Mais je ne suis pas le voir. C'est presque comme quelqu'un singe patché UserDict.get = UserDict.__getitem__, mais ce serait une très ombragé chose à faire...

OriginalL'auteur Chris B. | 2016-09-01