2017-03-24 2 views
1

Bonjour, je suis un débutant à Python.Python Variable - nom '' n'est pas défini

La déclaration des variables est frustrante car elle devrait être facile mais j'ai beaucoup de mal à faire fonctionner cela .. J'ai lu d'autres questions de stackoverflow et apparemment il n'y a pas d'initialisation en Python et j'ai besoin de mot-clé: global avant variable pour l'utiliser à différents endroits.

@app.route('/calculate', methods = ['GET'])  

def calculate(): 
     # get value from html by request.args.get() 

Option1.

global newWeightForSecondItem 
    if weightT1 != weightT2: 
     newWeightForSecondItem = convert(weightT1, weightT2, weight2) 

Option 2.

if weightT1 != weightT2: 
     global newWeightForSecondItem = convert(weightT1, weightT2, weight2) 

ne travaille .. Quand je fais ce calcul ci-dessous, je reçois une erreur: NameError: nom 'newWeightForSecondItem' est pas défini.

if discountT2 == "percentage": 
     finalPrice2 = float((float(price2) - (float(price2) * float(discount2)))/newWeightForSecondItem) 
    elif discountT2 == "dollar": 
     finalPrice2 = float((float(price2) - float(discount2))/newWeightForSecondItem) 


def convert(weightT1, weightT2, weight2): 
    # converting calculation here 

return weight2 


# main method 
if __name__ == '__main__': 
    app.debug = True 
    app.run() 
+2

Il n'y a pas de déclaration de variable en Python, ce qui explique probablement pourquoi vous trouvez cela difficile. –

+2

Pouvez-vous poster un ensemble plus complet de votre code ... c'est un problème de portée et vous nous avez montré votre champ d'application. – TemporalWolf

+0

@TemporalWolf basé sur vos conseils, j'ai ajouté le code général. Je vous remercie. –

Répondre

0

si vous voulez avoir newWeightForSecondItem comme une variable globale peut-être vous pouvez essayer ceci:

newWeightForSecondItem = None 

@app.route('/calculate', methods = ['GET'])  
def calculate(): 
    global newWeightForSecondItem 
    if weightT1 != weightT2: 
     newWeightForSecondItem = convert(weightT1, weightT2, weight2) 

Vous déclarez/initialiser la variable globale, et vous pouvez l'utiliser dans la fonction

+0

Merci pour le commentaire. Je ne reçois plus la même erreur mais maintenant je reçois NonType dans le calcul. –

+0

Au lieu de newWeightForSecondItem = None, vous devez initialiser la valeur avant de l'utiliser. peut-être le définir à newWeightForSecondItem = 0. –

+1

@GabrielFalcones qui donnera un 'ZeroDivisionError', parce qu'il l'appelle avant de lui assigner. – TemporalWolf

1

J'ai passé beaucoup de temps à comprendre pourquoi j'ai eu cette erreur. NameError: le nom 'newWeightForSecondItem' n'est pas défini.

Cependant, ce n'était pas le problème principal. J'ai oublié de convertir la chaîne en float type de données pour newWeightForSecondItem. Après que je l'ai changé pour flotter (newWeightForSecondItem), cela fonctionne. C'était une erreur très facile et je pense que l'erreur de python n'était pas très utile.

Merci pour tous les commentaires, tout le monde.