运行 使用 getitem 的 Python 程序时出现关键错误
Key error while running a Python program with getitem
下面的代码在 运行 on Amazon Linux 时创建此错误 2. 目的是让 python 程序响应来自不和谐服务器的用户输入。我所知道的足以让我来到这里 python。任何帮助表示赞赏。他们的服务器是 运行 亚马逊的更新版本 Linux 2.
File "./bot.py", line 65, in <module>
client.run(os.environ[config.discord_key])
File "/usr/lib64/python3.7/os.py", line 681, in __getitem__
raise KeyError(key) from None
KeyError: 'SuperSecretSquirrelStuff-key'
import discord, asyncio, os, boto3, config
client = discord.Client()
ec2 = boto3.resource('ec2')
instance_id = config.instance_id
#Temp
instance = ec2.Instance(instance_id)
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------------')
@client.event
async def on_message(message):
memberIDs = (member.id for member in message.mentions)
if client.user.id in memberIDs:
if 'stop' in message.content:
if turnOffInstance():
await client.send_message(message.channel, 'AWS Instance stopping')
else:
await client.send_message(message.channel, 'Error stopping AWS Instance')
elif 'start' in message.content:
if turnOnInstance():
await client.send_message(message.channel, 'AWS Instance starting')
else:
await client.send_message(message.channel, 'Error starting AWS Instance')
elif 'state' in message.content:
await client.send_message(message.channel, 'AWS Instance state is: ' + getInstanceState())
elif 'reboot' in message.content:
if rebootInstance():
await client.send_message(message.channel, 'AWS Instance rebooting')
else:
await client.send_message(message.channel, 'Error rebooting AWS Instance')
def turnOffInstance():
try:
instance.stop(False, False)
return True
except:
return False
def turnOnInstance():
try:
instance.start()
return True
except:
return False
def getInstanceState():
return instance.state['Name']
def rebootInstance():
try:
instance.reboot()
return True
except:
return False
client.run(os.environ[config.discord_key])```
根据您的错误信息,您的系统中没有环境变量“SuperSecretSquirrelStuff-key”。
这是可以重现您的问题的代码:
import os
print(os.environ["ANY_KEY_NOT_EXIST"])
要解决此问题,您应该在系统中添加环境变量“SuperSecretSquirrelStuff-key”。
例如,在您的终端中执行此代码行 shell:
export SuperSecretSquirrelStuff-key=xxx
顺便说一下,环境密钥“SuperSecretSquirrelStuff-key”可能无效。
您正在尝试从系统环境变量中读取,显然尚未设置,因此 KeyError
(因为 SuperSecretSquirrelStuff-key
在 os.environ
中不作为键存在).
我看到您之前使用过 config
对象来阅读,例如 instance_id
.
在这种情况下,如果您想要 discord_key
:
的值,请直接从您的配置中读取而不是执行 os.environ
client.run(config.discord_key)
或者(不确定为什么要这样做)在读取之前设置环境变量:
os.environ[config.discord_key] = "VALUE";
client.run(os.environ[config.discord_key])
下面的代码在 运行 on Amazon Linux 时创建此错误 2. 目的是让 python 程序响应来自不和谐服务器的用户输入。我所知道的足以让我来到这里 python。任何帮助表示赞赏。他们的服务器是 运行 亚马逊的更新版本 Linux 2.
File "./bot.py", line 65, in <module>
client.run(os.environ[config.discord_key])
File "/usr/lib64/python3.7/os.py", line 681, in __getitem__
raise KeyError(key) from None
KeyError: 'SuperSecretSquirrelStuff-key'
import discord, asyncio, os, boto3, config
client = discord.Client()
ec2 = boto3.resource('ec2')
instance_id = config.instance_id
#Temp
instance = ec2.Instance(instance_id)
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------------')
@client.event
async def on_message(message):
memberIDs = (member.id for member in message.mentions)
if client.user.id in memberIDs:
if 'stop' in message.content:
if turnOffInstance():
await client.send_message(message.channel, 'AWS Instance stopping')
else:
await client.send_message(message.channel, 'Error stopping AWS Instance')
elif 'start' in message.content:
if turnOnInstance():
await client.send_message(message.channel, 'AWS Instance starting')
else:
await client.send_message(message.channel, 'Error starting AWS Instance')
elif 'state' in message.content:
await client.send_message(message.channel, 'AWS Instance state is: ' + getInstanceState())
elif 'reboot' in message.content:
if rebootInstance():
await client.send_message(message.channel, 'AWS Instance rebooting')
else:
await client.send_message(message.channel, 'Error rebooting AWS Instance')
def turnOffInstance():
try:
instance.stop(False, False)
return True
except:
return False
def turnOnInstance():
try:
instance.start()
return True
except:
return False
def getInstanceState():
return instance.state['Name']
def rebootInstance():
try:
instance.reboot()
return True
except:
return False
client.run(os.environ[config.discord_key])```
根据您的错误信息,您的系统中没有环境变量“SuperSecretSquirrelStuff-key”。
这是可以重现您的问题的代码:
import os
print(os.environ["ANY_KEY_NOT_EXIST"])
要解决此问题,您应该在系统中添加环境变量“SuperSecretSquirrelStuff-key”。
例如,在您的终端中执行此代码行 shell:
export SuperSecretSquirrelStuff-key=xxx
顺便说一下,环境密钥“SuperSecretSquirrelStuff-key”可能无效。
您正在尝试从系统环境变量中读取,显然尚未设置,因此 KeyError
(因为 SuperSecretSquirrelStuff-key
在 os.environ
中不作为键存在).
我看到您之前使用过 config
对象来阅读,例如 instance_id
.
在这种情况下,如果您想要 discord_key
:
os.environ
client.run(config.discord_key)
或者(不确定为什么要这样做)在读取之前设置环境变量:
os.environ[config.discord_key] = "VALUE";
client.run(os.environ[config.discord_key])