2017-06-09 3 views
0

So wie ich in Python Argument lernen, eine Funktion mit einem Argument zu verwenden, ist wie folgt:Funktionsargument in Python: nicht erhöhen Nameerror

def res(arg1, arg2): 
    try: 
     print(a+b) # it prints result.. shouldn't code be break here? 
     return a + b # this also returns a result. 
    except NameError: 
     return "failed." 
a = 2 
b = 3 
print(res(a, b)) 

ich erwarte, dass in einem solchen Fall Funktion NameError erhöhen sollte und es sollte in Ausnahmeblock behandelt werden, aber es wird keine Art von Fehler, stattdessen funktioniert es mit beiden arg1+arg2 und a +b Ich vermisse etwas hier? brauche jede Art von Hilfe, um dies zu verstehen und zu überwinden.

+6

'a' und 'b' sind Globals in Ihrem Modul und alle globalen Variablen sind auf Ihre Funktion zur Verfügung. –

+0

wie diese Sprache interpretiert wird, sollte keine globale Variable vor der Funktionsdefinition definiert werden? – Gahan

+4

Nein, die Globals müssen nur definiert werden, bevor Sie die Funktion _call_ aufrufen. Sie können diesen Artikel hilfreich finden: [Fakten und Mythen über Python-Namen und Werte] (http://nedbatchelder.com/text/names.html), die von SO-Veteran Ned Batchelder geschrieben wurde. –

Antwort

0

dies versuchen, wenn Sie Ausnahme erhöhen wollen:

def res(arg1, arg2): 
    try: 
     print(a+b) # tries to find variable a and b in global scope if it found it will use it's value 
     return a + b 
    except NameError: 
     return "failed." 

def function2(): 
    a = 2 # this is within scope of function2() so it is not accessible by res() 
    b = 3 
    print(res(a, b)) 


function2() # on calling this you will get NameError from res because a and b are not in global scope 
Verwandte Themen