N未定义(全球现在)

时间:2018-05-09 11:01:15

标签: python-3.x

所以我目前正在做一个随机生成器项目,它读取excel文件并随机选择数据但是当我开发代码时,我收到以下错误:

line 19, in RandomG
    L2 = Label(r2, text=edata).grid(row=3, column=1).grid(rowspawn=3, sticky=S)
NameError: name 'edata' is not defined

我被告知一次使用" global"所以变量适用于所有函数 但它仍然给我错误。

这是我的代码:

from tkinter import *
from tkinter import ttk
from tkinter.filedialog import askopenfilename
import xlrd
import random
import os

creds = 'Python file.txt' # This just sets the variable creds to 'tempfile.temp'

def RandomG():
    global r2
    r.destroy()
    rootA.destroy()
    r2 = Tk()
    r2.title('Random Generator')
    r2.geometry('350x300')
    r2.resizable(False, False)
    L1 = Label(r2, text='Welcome to My Random Generator!!').grid(row=1, column=1)
    L2 = Label(r2, text= edata).grid(row=3, column=1).grid(rowspawn=3, sticky=S)
    L2.config(width=200)
    B1 = Button(r2, text="Browse", command=Directory)
    B1.grid(rowspan=3, sticky=S)
    B2 = Button(r2, text="Randomize", command=Generator)
    B2.grid(rowspan=3, sticky=S)
    r2.mainloop

def Directory():
    global filename
    filename = askopenfilename(filetypes=(("Excel Files", ".xlsx"),("All files","*.*")))
    pathlabel = Label(r2)
    pathlabel.config(text=(filename))
    pathlabel.grid(columnspan=2)
    pathlabel.pack()

def Generator():
    global edata
    global sheet
    global workbook
    with open(filename)as a:
        filelocation = (filename)
        workbook = xlrd.open_workbook(filelocation)
        sheet = workbook.sheet_by_index(0)
        for col in range(sheet.nrows):
            edata = print[sheet.pop(sheet.random.cell.value(0, col))]

2 个答案:

答案 0 :(得分:1)

这不是global关键字的工作方式...... global只是告诉你的函数在全局命名空间中查找变量(而不是你函数的本地命名空间)。

这样可行:

N = None

def f():
    global N
    print(N)

首先没有定义N(或在函数中设置它),它不会。

这也有效:

def f():
    global N
    N = 5
    print(N)

(它会将N溢出到您的全局命名空间。)

在任何情况下:在尝试读取其值之前,您必须设置N(或edata)。

答案 1 :(得分:0)

这意味着edata没有价值。它需要在调用之前定义。

相关问题