Получение keyerror в python

Я получаю ключевую ошибку при разборе файла json.

json файл config.json:

{
 "user": {
   "name": "hsani",
   "password": "AQ@SWkeet999"
 },

 "env": {
   "Staging": "https://serviceconsole-stg.tivo.com/serviceconsole/login.action",
   "QE": "http://serviceconsolese01.tivo.com:9090/serviceconsole"
 }
}

Я называю это здесь:

with open('config.json', 'r') as login_details:
           login_conf = json.load(login_details)
           #print config["Staging"]
       if env == 'Staging':
           self.driver.get(login_conf['env']['Staging'])
       elif env == 'QE':
           self.driver.get(login_conf['env']['QE'])

Полученная ошибка

Traceback (most recent call last):
 File "testdemo.py", line 9, in <module>
   driver = MSOSOLUTION.login.BrowserLogin('Staging')
 File "../lib/python/MSOSOLUTION/login.py", line 20, in __init__
   self.driver.get(login_conf['env']['Staging'])
KeyError: 'env

Может кто-нибудь объяснить, как решить ключевую ошибку?

игнорируйте QE, он не идет туда, так как env находится здесь ...

Vidhya 11.07.2018 09:16

Если ошибка сохраняется с исправленным файлом json, здесь что-то не хватает. Пожалуйста, покажите нам остальных учеников вашего класса.

shmee 11.07.2018 09:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
608
2

Ответы 2

вы получили одну запятую после "user":{}

а также изменить

with open('data.json') as data_file:
    data = json.loads(data_file.read())

используйте json.loads вместо json.load. В Python 3 json.loads принимает строковый параметр. json.load принимает параметр объекта, подобного файлу. data_file.read() возвращает строковый объект.

{
 "user": {
   "name": "hsani",
   "password": "AQ@SWkeet999"
 },

 "env": {
   "Staging": "https://serviceconsole-stg.tivo.com/serviceconsole/login.action",
   "QE": "http://serviceconsolese01.tivo.com:9090/serviceconsole"
 }
}

Отслеживание (последний вызов последним): файл "testdemo.py", строка 9, в файле <module> driver = MSOSOLUTION.login.BrowserLogin ('Staging') "../lib/python/MSOSOLUTION/login.py", строка 17, в в этом login_conf = json.load (login_details (x)) NameError: глобальное имя 'x' не определено, получена вышеуказанная ошибка

Vidhya 11.07.2018 09:31

единственная ошибка в файле config.json вы забыли одну запятую, все остальное верно

Nihal 11.07.2018 09:34

просто скопируйте мой json и вставьте его в свой файл config.json

Nihal 11.07.2018 09:35

с open ('config.json') как login_details: login_conf = json.loads (login_details.read ()) #print config ["Staging"] if env == 'Staging': self.driver.get (login_conf ['env '] [' Staging ']) по-прежнему появляется та же ошибка KeyError:' env

Vidhya 11.07.2018 09:54

Можете ли вы распечатать login_conf.keys(), ваша ошибка означает, что нет ключа с именем 'env'

Nihal 11.07.2018 09:59

[u'user '] Traceback (последний вызов последним): файл "testdemo.py", строка 9, в файле <module> driver = MSOSOLUTION.login.BrowserLogin (' Staging ') "../lib/python/MSOSOLUTION /login.py ", строка 20, в в этом self.driver.get (login_conf ['env'] ['Staging']) KeyError: 'env'

Vidhya 11.07.2018 10:01

распечатал только пользователь .. :(

Vidhya 11.07.2018 10:01

Я не думаю, что есть другая проблема, кроме файла json. вы не делаете еще один файл json и используете его.

Nihal 11.07.2018 10:06

несколько замечаний: Видхья

  1. json отсутствует , между user и env
  2. вы можете использовать login_conf.get('env').get('qe', None)
  3. в config.json это QE, а не qe

Я пробовал 1, даже если он не работал ... вы можете игнорировать 3-й случай, потому что он даже не перейдет в QE

Vidhya 11.07.2018 09:32

@Vidhya, можешь рассказать еще немного, чтобы я мог помочь с

Pankaj78691 11.07.2018 09:35

при разборе файла json я получаю вышеупомянутую ошибку, ключевую ошибку.

Vidhya 11.07.2018 09:42

Относительно 2: None во втором get() не нужен, это значение по умолчанию и будет возвращено неявно, если имя не может быть найдено. Кроме того, второй get() вызовет AttributeError, если первый get() не может найти env во внешнем dict, который затем вернет упомянутый None по умолчанию.

shmee 11.07.2018 09:42

мимо содержимого self.driver

Pankaj78691 11.07.2018 09:52

@Vidhya сделайте print self.driver перед строкой if env == 'Staging': и скопируйте результат сюда

Pankaj78691 11.07.2018 10:14

Другие вопросы по теме