2013-04-28 24 views
1

我一直在爲Minecraft的Raspberry Pi版本製作一個模組,每當我在程序中輸入其中一個命令時,我都會感到非常沮喪的錯誤。這裏是我的代碼:來自變量內容的Python NameError

import minecraft.minecraft as minecraft 
import minecraft.block as block 
import time 

mc = minecraft.Minecraft.create(); 

print('newBlock - Change ID of block to spawn') 
print('blockType - Change subID of block to spawn') 
print('pos1') 
print('pos2') 
print('fill - fill specified area') 
print('clear - clear specified area') 
print 
while True: 
comm=str(input('Command: ')) 
if comm=="newBlock": 
    blockId = int(input('Enter Block ID: ')) 
    mc.postToChat('Block set to ID: ' + str(blockId)) 
if comm=="blockType": 
    blockData = int(input('Enter Block Type: ')) 
if comm=="pos1": 
    position1 = mc.player.getPos() 
    mc.postToChat('Set Position 1 as: x' + str(position1.x) + ' y' + str(position1.y) + ' z' + str(position1.z)) 
if comm=="pos2": 
    position2 = mc.player.getPos() 
    mc.postToChat('Set Position 2 as: x' + str(position2.x) + ' y' + str(position2.y) + ' z' + str(position2.z)) 
if comm=="fill": 
    mc.setBlocks(position1.x, position1.y, position1.z, position2.x, position2.y, position2.z, blockId, blockType) 
    mc.postToChat('Filled specified area with: ' + str(blockId)) 
if comm=="clear": 
    mc.setBlocks(position1.x, position1.y, position1.z, position2.x, position2.y, position2.z, 0) 
    mc.postToChat('Cleared specified area') 

每次輸入是通過變量「通訊」計劃吐出此錯誤消息的用戶輸入:

Traceback (most recent call last): 
    File "WorldEditPi.py", line 15, in <module> 
     comm=str(input('Command: ')) 
    File "<string>", line 1, in <module> 
NameError: name 'newBlock(or what ever the user entered into 'comm')' is not defined 

請告訴我真的困惑的是,它甚至沒有談論一個變量'newBlock'不是一個變量,它是變量'comm'的內容。這發生在所有命令中,而不僅僅是'newBlock'。

回答

3

您正在使用input,您需要使用raw_inputinput評估它傳遞的字符串。 raw_input給你一個字符串,這是你想要的。

請注意,這僅適用於Python 2.在Python 3中,raw_input不再可用,input與Python 2的raw_input等效。在Python 2中,input相當於eval(raw_input)

0

當您使用input()輸入newBlock時,解析器將newBlock視爲變量而不是字符串。所以你需要使用的raw_input

看到輸入()

def input(prompt): 
    return (eval(raw_input(prompt))) 
的裁判