0

このコードに問題があります。名前の誤りが多発しているようですが、検索しても解決策が見つかりませんでした。これがコードです...

def fmp_sel():
    with open ('MonPlotDb.csv', 'rU') as csvfile: 
            next(csvfile, None)
            fmpList = csv.reader(csvfile, delimiter=',', dialect=csv.excel_tab)
            for item in enumerate(fmpList):
                    print "[%d] %s" % (item)
    while True:
        try:
            in_Sel = raw_input(('''Choose from list or 'q' to quit:'''))                                               
             if in_Sel == 'q':
                print 'Quit?'                                           
                conf = raw_input('Really? (y or n)...')    
                if conf == 'y':                                              
                    print 'Seeya!'                                        
                    break
                else:
                    continue                                                        
             plotOrig = DataPlotLoc[int(in_Sel) + 1]                              
            print 'You selected', plotOrig[1]                
            break
        except (ValueError, IndexError):
            print 'Error: Try again'

そしてトレースバック……

File "E:\FireRegDb\Rec_2012\dblist_outonly.py", line 28, in fmp_sel  
plotOrig = DataPlotLoc[int(in_Sel) + 1]                             
NameError: global name 'DataPlotLoc' is not defined

この関数は main() から呼び出されていますが、'DataPlotLoc' がこの関数内にあるためグローバル名である理由がわかりません。いずれにせよ、それを定義する行が欠けていると思いますが、どのように、どこで、わかりません。助けていただければ幸いです。

編集:さらに情報を追加するだけです..「DataPlotLoc」は、コードに挿入されたときのリストの名前でした。DataPlotLoc=[['a', 'b', 'c',....]] そしてそれはうまくいきました。行 plotOrig = DataPlotLoc[int(in_Sel) + 1] はこのリストを参照していますが、明らかにcsv.readerによって読み取られているため、この変数を割り当てる方法がわかりません。ユーザーが「q」を入力するかどうかを確認した後、整数を受け入れる必要があり、入力された数値に+1を追加して、リストから選択された対応する行項目の正しいインデックス番号と一致するようにする必要があると思いました。これが少し混乱している場合は申し訳ありませんが、私自身が少し混乱しています...

4

2 に答える 2

2

エラーメッセージが示すように、DataPlotLoc定義する前に使用しています。コードを検索すると、どこにも定義されていないことがわかります。それが何を意味するのかを知らずに、それ以上の答えを出すことはできません。

Python は、その名前のグローバル変数を意味していると想定します。これは、何も割り当てていないため、ローカル変数になってしまうからです。

于 2013-04-22T23:41:01.943 に答える