Python KeyError: 'OUTPUT_PATH'

6

我正在尝试运行以下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。我该怎么做?


1
你需要将OUTPUT_PATH定义为导出的环境变量。或者更好的方法是:使用命令行参数... - Jean-François Fabre
你有设置过环境变量'OUTPUT_PATH'吗?在bash中,你可以通过运行以下命令进行设置:export OUTPUT_PATH='myfile' - joaovictortr
你想要做什么? - Chris_Rands
6个回答

11

我相信有其他的方法可以做到这一点,但是对于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. 或者,您可以直接在Python中设置os.environ,例如:

    os.environ['OUTPUT_PATH'] = 'junk.txt' # 在打开fptr之前!


是的,你说得对,至少我来自HackerRank :) - Nusrat Nuriyev

8

os.environ可以让您从Python脚本中访问环境变量,但似乎您没有名为OUTPUT_PATH的环境变量。在运行Python代码之前,在终端中设置一个名为OUTPUT_PATH的环境变量,例如:

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

您的Python脚本将在该位置创建一个文件。


1
它仍然输出错误,我真的很惊讶,被近1000人查看并由多人评论的问题却遭到负评,而那个甚至不能解决问题的答案却得到了赞。 - SDE
@SDE 我解释了os.environ的作用以及为什么op会遇到这样的错误。我真的很惊讶答案“您没有名为OUTPUT_PATH的环境变量”不能解决问题。您需要创建一个名为OUTPUT_PATH的环境变量,该变量显示要创建的文件的路径,就是这样。在这里,我根据op的情况进行了特别回答,他使用Linux操作系统,用户名为“inendekikral”。 - unlut
1
事实上,这看起来会导致 IsADirectoryError,因此他应该只使用 "output.txt" 或 "home/inindekikral/Desktop/output.txt". - thorr18

1

KeyError 表示元素没有对应的键。这意味着 os.environ 没有键为 'OUTPUT_PATH'


0

将您的代码更改为以下内容:

if __name__ == '__main__':

t = int(input())

for t_itr in range(t):

    n = int(input())

    result = maximumDraws(n)

    print(str(result) + '\n')

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0

简单来说,将Python代码的路径更改为您的本地路径。

fptr = open("./result.output", 'w')

0
Hackerrank将输出发送到文件中,但是为了本地练习,可以将输出打印出来。
您可以通过注释掉以下这些行来删除ftpr的使用: fptr = open(os.environ['OUTPUT_PATH'], 'w') 和 fptr.close()
并将fptr.write(str(result) + '\n')这一行替换为print(str(result) + '\n')。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接