未定义执行函数的全局名称

时间:2015-12-23 11:30:51

标签: python python-2.7

我正在编写一个项目,其中我有2个文件(dataStructure.py和calculUser.py)一起工作,1个是测试文件。

structureDonnees.py我有这个功能,它读取包含汽车的数据集并构建数据结构:

# -*-encoding:utf-8-*-

import csv
import sys #pour utiliser maximum et minimum du type float
from calculUser import *
from trajetUser import *


def recupVoiture() :

#nom de la base de donnée
nomFichier = 'CO2_passenger_cars_v10.csv'
#on ouvre le fichier en lecture
opener = open(nomFichier, "r")
#On ouvre le fichier nomFichier en lecture
lectureFichier = csv.reader(opener, delimiter='\t')
#le dico contenant les carburants
fuelType = dict()
#le dico contenant les voitures
voiture = dict()
#le dico contenant les émissions de CO2 en g/km
emission = dict()
#minimum et maximum emission
min_emission = sys.float_info.max #initialisé à max(float) pour que l'on soit sûr que toutes les emissions soient plus petites
max_emission = sys.float_info.min #initialisé à min(float) pour que l'on soit sûr que toutes les emissions soient plus grandes


for row in lectureFichier :
    #Si la colonne existe
    if row:
        #construction du dictionnaire voiture
        if voiture.has_key(row[10]) : 
            if row[11].upper() not in voiture[row[10]] : voiture[row[10]].append("%s" %row[11].upper()) #on ajoute le modèle
        else :
            voiture[row[10]] = [] #on crée une liste vide contenant les modèles et leurs versions
            voiture[row[10]].append("%s" %row[11]) #on ajoute le modèle et sa version

        #construction du dictionnaire fuelType
        if fuelType.has_key(row[10]) : fuelType[row[10]].append(row[19].upper()) #ajout du type de carburant utilisé par la voiture correspondante dans voiture{}
        else : 
            fuelType[row[10]] = [] #on crée une liste vide contenant les carburants
            fuelType[row[10]].append(row[19]) #ajout du type de carburant utilisé par la voiture correspondante dans voiture{}

        #construction du dictionnaire emission
        if emission.has_key(row[10]) : 
            emission[row[10]].append(row[14]) #ajout de la quantité de CO2 émise par la voiture correspondante dans voiture{}
            min_emission = minEmission(float(row[14]), min_emission)
            max_emission = maxEmission(float(row[14]), max_emission)
        else : 
            emission[row[10]] = [] #on crée une liste vide contenant les émissions en CO2
            fuelType[row[10]].append(row[14]) #ajout de la quantité de CO2 émise par la voiture correspondante dans voiture{}
            min_emission = minEmission(float(row[14]), min_emission)
            max_emission = maxEmission(float(row[14]), max_emission)

#On ferme le fichier
opener.close()
#La valeur de retour est un tableau contenant les structures de données générées.
res = [voiture, fuelType, emission, min_emission, max_emission]
return res

calculUser.py中,我定义了minEmissionmaxEmission函数:

def minEmission(emissionFichier, min_emission) :

     if emissionFichier < min_emission :
        min_emission = emissionFichier

    return min_emission


def maxEmission(emissionFichier, max_emission) :

    if emissionFichier > max_emission :
        max_emission = emissionFichier

    return max_emission

当我执行test.py时,我收到此行的错误:

table = recupVoiture()

Traceback (most recent call last):
File "test.py", line 13, in <module>
tableau = recupVoiture()
File "/home/user/Polytech/ge3/ProjetPython/structureDonnees.py", line 60, in recupVoiture
min_emission = minEmission(float(row[14]), min_emission)
NameError: global name 'minEmission' is not defined

我不明白为什么会收到此错误。通过执行除test.py之外的所有内容,我没有收到任何错误,但是当我这样做时,由于minEmissionmaxEmission未定义而无法执行。

是因为我在定义函数时正在调用函数吗? 我怎么能解决它?

1 个答案:

答案 0 :(得分:0)

我修复了问题,似乎我的函数awk '{...} inputFile' | sort -nminEmission()无法引用maxEmission()max_emission,因为这些变量是在{{{}}中声明的1}}而不是min_emission

我通过创建一个中间变量来修复它,该变量取值structureDonnees.pycalculUser.py并返回,而不是min_emissionmax_emission

另外,我必须直接在min_emission函数中执行:max_emission。我知道这很糟糕,但它解决了这个问题。我将使用它,直到找到更好,更清洁的解决方案。

感谢帮助人员,如果我不得不提出任何其他帮助,我会做更好的帖子/代码! :)