2012-07-02 23 views
17

यह मेरा अजगर कोड है:पायथन नाम त्रुटि: वैश्विक नाम 'NAME' परिभाषित नहीं किया गया है! (लेकिन यह परिभाषित किया गया है)

import es, popuplib, cmdlib 

info = es.AddonInfo() 
info['name']  = "bilbodog Vaaben Menu" 
info['version']  = "1.1" 
info['author']  = "bilbodog" 
info['url']   = "" 
info['description'] = "En vaaben menu der kan give vaaben til spillere" 
def load(): 
    es.regclientcmd('bm_version', 'bm/bm_version') 
    cmdlib.registerSayCommand('!wpa', sendBmMenu, 'Send BM Menu') 
    es.msg('#multi', '#green[bilbodog Vaaben Menu] #defaultblev loaded!') 

global bilbodog, bilbodogSelf, bilbodogOther, bilbodogSelf2, bilbodogSelf3, bilbodogSelf4, bilbodogSelf5, bilbodogSelf6, bilbodogSelf7, bilbodogSelf8, bilbodogSelf9, bilbodogOther2, bilbodogOther3, bilbodogOther4, bilbodogOther5, bilbodogOther6, bilbodogOther7, bilbodogOther8, bilbodogOther9, bilbodogadmins 

bilbodogadmins = ('STEAM_0:1:25150824', 'STEAM_ID_LAN', 'STEAM_ID_PENDING') 
bilbodog = popuplib.create('bilbodog') 
bilbodog.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodog.addline('Weapon Menu - Hvem vil De give et vaaben?') 
bilbodog.addline('->1. Mig selv') 
bilbodog.addline('->2. Andre spillere') 
bilbodog.addline('------------------------------') 
bilbodog.addline('0 Luk') 
bilbodog.menuselect = bilbodogscript 
bilbodogSelf = popuplib.create('bilbodogSelf') 
bilbodogSelf.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodogSelf.addline('Weapon Menu - Mig selv') 
bilbodogSelf.addline('->1. Haandpistoler') 
bilbodogSelf.addline('->2. Stormgevaerer') 
bilbodogSelf.addline('->3. Haglgevaerer') 
bilbodogSelf.addline('->4. Maskinepistoler') 
bilbodogSelf.addline('->5. Sniper Vaaben') 
bilbodogSelf.addline('->6. Maskingevaer') 
bilbodogSelf.addline('->7. Udstyr') 
bilbodogSelf.addline('->8. Vaaben Saet') 
bilbodogSelf.addline('------------------------------') 
bilbodogSelf.addline('0 Luk') 
bilbodogSelf.menuselect = bilbodogSelfscript 
bilbodogSelf2 = popuplib.create('bilbodogSelf2') 
bilbodogSelf2.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodogSelf2.addline('Weapon Menu - Mig selv - Haandpistoler') 
bilbodogSelf2.addline('->1.G18') 
bilbodogSelf2.addline('->2.USP45') 
bilbodogSelf2.addline('->3.P228') 
bilbodogSelf2.addline('->4.Desert Eagle') 
bilbodogSelf2.addline('->5.Five-Seven') 
bilbodogSelf2.addline('->6.Dual Elite') 
bilbodogSelf2.addline('------------------------------') 
bilbodogSelf2.addline('->8.Tilbage') 
bilbodogSelf2.addline('0.Luk') 
bilbodogSelf2.menuselect = bilbodogSelf2script 
# ...SNIP... 
bilbodogSelf9 = popuplib.create('bilbodogSelf9') 
bilbodogSelf9.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodogSelf9.addline('Weapon Menu - Mig selv - Udstyr') 
bilbodogSelf9.addline('->1.M4A1, Deagle, Nades, Armor') 
bilbodogSelf9.addline('->2.M4A1, Elite, Nades, Armor') 
bilbodogSelf9.addline('->3.AK47, Deagle, Nades, Armor') 
bilbodogSelf9.addline('->4.AK47, Elite, Nades, Armor') 
bilbodogSelf9.addline('->5.AWP, Deagle, Nades, Armor') 
bilbodogSelf9.addline('->6.AWP, Elite, Nades, Armor') 
bilbodogSelf9.addline('------------------------------') 
bilbodogSelf9.addline('->8.Tilbage') 
bilbodogSelf9.addline('0.Luk') 
bilbodogSelf9.menuselect = bilbodogSelf9script 

bilbodogOther = popuplib.create('bilbodogOther') 
bilbodogOther.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodogOther.addline('Weapon Menu - Andre spillere') 
bilbodogOther.addline('->1. Haandpistoler') 
bilbodogOther.addline('->2. Stormgevaerer') 
bilbodogOther.addline('->3. Haglgevaerer') 
bilbodogOther.addline('->4. Maskinepistoler') 
bilbodogOther.addline('->5. Sniper Vaaben') 
bilbodogOther.addline('->6. Maskingevaer') 
bilbodogOther.addline('->7. Udstyr') 
bilbodogOther.addline('->8. Vaaben Saet') 
bilbodogOther.addline('------------------------------') 
bilbodogOther.addline('0 Luk') 
bilbodogOther.menuselect = bilbodogOtherscript 
bilbodogOther2 = popuplib.create('bilbodogOther2') 
bilbodogOther2.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodogOther2.addline('Weapon Menu - Andre spillere - Haandpistoler') 
bilbodogOther2.addline('->1.G18') 
bilbodogOther2.addline('->2.USP45') 
bilbodogOther2.addline('->3.P228') 
bilbodogOther2.addline('->4.Desert Eagle') 
bilbodogOther2.addline('->5.Five-Seven') 
bilbodogOther2.addline('->6.Dual Elite') 
bilbodogOther2.addline('------------------------------') 
bilbodogOther2.addline('->8.Tilbage') 
bilbodogOther2.addline('0.Luk') 
bilbodogOther2.menuselect = bilbodogOther2script 
# ...SNIP... 
bilbodogOther9 = popuplib.create('bilbodogOther9') 
bilbodogOther9.addline('---------------bilbodog Vaaben Menu---------------') 
bilbodogOther9.addline('Weapon Menu - Andre spillere - Udstyr') 
bilbodogOther9.addline('->1.M4A1, Deagle, Nades, Armor') 
bilbodogOther9.addline('->2.M4A1, Elite, Nades, Armor') 
bilbodogOther9.addline('->3.AK47, Deagle, Nades, Armor') 
bilbodogOther9.addline('->4.AK47, Elite, Nades, Armor') 
bilbodogOther9.addline('->5.AWP, Deagle, Nades, Armor') 
bilbodogOther9.addline('->6.AWP, Elite, Nades, Armor') 
bilbodogOther9.addline('------------------------------') 
bilbodogOther9.addline('->8.Tilbage') 
bilbodogOther9.addline('0.Luk') 
bilbodogOther9.menuselect = bilbodogOther9script 

def sendBmMenu(userid, args): 
    steam = es.getplayersteamid(userid) 
    if steam in bilbodogadmins: 
     bilbodog.send(userid) 
    else: 
     es.tell(event_var['userid'], '#multi', '#greenDe har ikke adgang til denne kommando!') 

def bilbodogscript(userid, choice, popupid): 
    if choice == 1: 
      bilbodogSelf.send(userid) 
    elif choice == 2: 
      bilbodogOther.send(userid) 

def bilbodogSelfscript(userid, choice, popupid): 
    if choice == 1: 
     bilbodogSelf2.send(userid) 
    elif choice == 2: 
     bilbodogSelf3.send(userid) 
    elif choice == 3: 
     bilbodogSelf4.send(userid) 
    elif choice == 4: 
     bilbodogSelf5.send(userid) 
    elif choice == 5: 
     bilbodogSelf6.send(userid) 
    elif choice == 6: 
     bilbodogSelf7.send(userid) 
    elif choice == 7: 
     bilbodogSelf8.send(userid) 
    elif choice == 8: 
     bilbodogSelf9.send(userid) 

def bilbodogOtherscript(userid, choice, popupid): 
    if choice == 1: 
     bilbodogOther2.send(userid) 
    elif choice == 2: 
     bilbodogOther3.send(userid) 
    elif choice == 3: 
     bilbodogOther4.send(userid) 
    elif choice == 4: 
     bilbodogOther5.send(userid) 
    elif choice == 5: 
     bilbodogOther6.send(userid) 
    elif choice == 6: 
     bilbodogOther7.send(userid) 
    elif choice == 7: 
     bilbodogOther8.send(userid) 
    elif choice == 8: 
     bilbodogOther9.send(userid) 

def bm_version(): 
    es.msg('#multi', '#green[bilbodog Vaaben Menu] #defaultVersion 1.0') 
    es.msg('#multi', '#green[bilbodog Vaaben Menu] #defaultLavet af bilbodog') 

def unload(): 
    cmdlib.unregisterSayCommand('!wpa') 

मैं एक त्रुटि मिलती है:

NameError: global name 'bilbodogOther' is not not defined 

और त्रुटि यहीं चल रहा है:

def bilbodogscript(userid, choice, popupid): 
    if choice == 1: 
      bilbodogSelf.send(userid) 
    elif choice == 2: 
      bilbodogOther.send(userid) 

लेकिन मुझे समझ में नहीं आता, इसका क्या मतलब है?

+65

अच्छा भगवान आदमी, उन सभी क्रमांकित चर नामों की बजाय सूची या कुछ का उपयोग करें! – kindall

+11

सबसे पहले, 'वैश्विक' का उपयोग किसी फ़ंक्शन के अंदर किया जाना चाहिए, न कि वैश्विक दायरे ... –

+0

इसके अलावा, मैंने आपके कोड को छोटा कर दिया (कुछ दोहराव वाले चर हटा दिए) और इंडेंटेशन को ठीक किया। –

उत्तर

24

जब आप ऐसा करेंगे:

Traceback (most recent call last): 
    File "D:\Documents and Settings\My Documents\StackOverflow\test.py", line 2, in <module> 
    print bilbodog 
NameError: global name 'bilbodog' is not defined 

इसके बजाय, जब आप अपने वेरिएबल ठीक से परिभाषित:

global bilbodog 
print bilbodog 

आपको यह त्रुटि है

global bilbodog 
bilbodog = 15 #Here you give a value to bilbodog (even None) 
print bilbodog 

यह काम करता है !!!

लेकिन अगर आप एक pythonic तरीके से करना चाहते हैं:

def definition(): 
    global bilbodog 
    bilbodog = 15 #Here you give a value to bilbodog (even None) 

def test(): 
    print bilbodog 

if __name__ == '__main__': 
    definition() 
    test() 

तो, मुझे लगता है कि आप निष्पादित करने के लिए bilbodogscript() जबकि bilbodog अभी तक परिभाषित नहीं है का प्रयास करते समय आप bilbodog.menuselect = bilbodogscript है। समस्या यह है कि इस लाइन के साथ आप पहली बार इस त्रुटि होना चाहिए:

Traceback (most recent call last): 
    File "D:\Documents and Settings\My Documents\StackOverflow\test.py", line 3, in <module> 
    bilbodog.menuselect = bilbodogscript 
NameError: name 'bilbodogscript' is not defined 
+2

तो मैं अपनी त्रुटि को ठीक करने के लिए क्या करूँगा? "फिक्स" की सबसे सरल परिभाषा के लिए – bilbodog

+0

: केवल उन नामों का उपयोग करने की कोशिश न करें जिन्हें अभी तक परिभाषित नहीं किया गया है। –

+1

जैसा कि मैंने कहा था, मुझे लगता है कि आपको पहले एक त्रुटि उठानी चाहिए 'नाम त्रुटि: नाम' bilbodogscript 'परिभाषित नहीं किया गया है। ऐसा इसलिए है क्योंकि लाइन 'bilbodog.menuselect = bilbodogscript' के साथ आप विधि को कॉल नहीं करते हैं (आपको 'bilbodogscript ("यहां अपने तर्क") करना चाहिए) लेकिन आप विशेषता' bilbodogscript 'का उपयोग करने का प्रयास करते हैं जिसे अभी तक परिभाषित नहीं किया गया है । – VGO

4

अजगर में, "वैश्विक" का अर्थ है "मॉड्यूल स्तर", और यह केवल उपयोग मॉड्यूल स्तर ऐसे नाम हैं जो पलटाव हो रहे हैं के लिए समारोह के भीतर है समारोह के भीतर। यह मॉड्यूल स्तर "आगे की घोषणा" के रूप में नहीं है - ऐसा कुछ जो अस्तित्व में नहीं है, क्योंकि जब कोई मॉड्यूल लोड होता है (निष्पादित या आयात किया जाता है), शीर्ष स्तर पर सभी कोड अनुक्रमिक रूप से निष्पादित होते हैं।

2
global variable 
variable = 100 #Any value required 

def function1(): 
    global variable 
    variable = new_value # manipulation 

def function2(): 
    print variable # accessed 
+2

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि यह कैसे और/या समस्या का समाधान क्यों करता है, इसका उत्तर उत्तर के दीर्घकालिक मूल्य में सुधार होगा। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^