Ошибка ключа Python: 'OUTPUT_PATH'

Я пытаюсь запустить следующий код Python для упражнений

#!/bin/python3

import os
import sys

#
# Complete the maximumDraws function below.
#
def maximumDraws(n):
    return n+1

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    t = int(input())

    for t_itr in range(t):
        n = int(input())

        result = maximumDraws(n)

        fptr.write(str(result) + '\n')

    fptr.close()

но я получаю это сообщение об ошибке

Traceback (most recent call last):
  File "maximumdraws.py", line 13, in <module>
    fptr = open(os.environ['OUTPUT_PATH'], 'w')
  File "/home/inindekikral/anaconda3/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'OUTPUT_PATH'

Моя операционная система - Linux Mint 19 Cinnamon. Что я должен сделать?

вам нужно определить OUTPUT_PATH как экспортированный env. Переменная. Или лучше: используйте аргументы командной строки ...

Jean-François Fabre 11.10.2018 14:49

Вы установили переменную окружения OUTPUT_PATH? В bash вы можете установить его, запустив: export OUTPUT_PATH='myfile'

joaovictortr 11.10.2018 14:49

Что ты пытаешься сделать?

Chris_Rands 11.10.2018 14:53
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
3
14 885
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

KeyError означает, что у элемента нет ключа. Это означает, что os.environ не имеет ключа 'OUTPUT_PATH'.

Ответ принят как подходящий

os.environ позволяет вам получить доступ к переменным среды из вашего скрипта python, похоже, у вас нет переменной среды с именем OUTPUT_PATH. Из терминала вы запускаете свой скрипт python, перед запуском кода python установите переменную среды с именем OUTPUT_PATH, например:

export OUTPUT_PATH = "home/inindekikral/Desktop/output.txt"

Ваш скрипт python создаст файл в этом месте.

он по-прежнему выводит ошибку, я действительно удивлен, что вопрос, который просматривается почти 1000 раз и комментируется несколькими людьми, получает отрицательный голос, а ответ, который даже не решает проблему, получает положительный голос.

SDE 02.04.2019 01:53

@SDE Я объяснил, что делает os.environ и почему op обнаруживает такую ​​ошибку. Я действительно удивлен, как ответ «у вас нет переменной окружения с именем OUTPUT_PATH» не решает проблему. Вам нужно создать переменную среды с именем OUTPUT_PATH, которая показывает путь к файлу, который вы хотите создать, то есть его. Здесь я конкретно ответил в соответствии с ситуацией op, он использует операционную систему Linux и его имя пользователя «inendekikral».

unlut 02.04.2019 06:41

На самом деле, похоже, что это приведет к ошибке IsADirectoryError, поэтому вместо этого он должен использовать просто «output.txt» или «home / inindekikral / Desktop / output.txt».

thorr18 07.10.2020 03:57

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

fptr = open(os.environ['OUTPUT_PATH'], 'w')

... и я хочу, чтобы он просто выводился на стандартный вывод.

Я просто изменил эту строку на

fptr = sys.stdout   # stdout is already an open stream

и делает то, что я хочу.

Обратите внимание, что, с одной стороны, os.environ['OUTPUT_PATH'] - это строка, а fptr - указатель на поток / файл.

Варианты:

  1. Если вы хотите записать в файл, вы можете сделать это способом, предложенным выше (установив переменную среды OUTPUT_PATH).

  2. Или вы можете установить os.environ непосредственно в python, например.

    os.environ['OUTPUT_PATH'] = 'junk.txt' # before you open the fptr!

Да вы правы, по крайней мере, я из HackerRank :)

Nüsrat Nuriyev 01.05.2021 15:43

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