Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x N未定义(全局存在)_Python 3.x - Fatal编程技术网

Python 3.x N未定义(全局存在)

Python 3.x N未定义(全局存在),python-3.x,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 有一次我被告知使用全局变量,因此变量适用于所有函数 但它仍然给了我错误 这是我的密码: from t

因此,我目前正在做一个项目,它是一个随机生成器,可以读取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
有一次我被告知使用全局变量,因此变量适用于所有函数 但它仍然给了我错误

这是我的密码:

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))]
这意味着edata没有值。在调用它之前需要定义它。

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

这将有助于:

N = None

def f():
    global N
    print(N)
如果不先定义N或在函数中设置它,它将不会

这也将有助于:

def f():
    global N
    N = 5
    print(N)
它将溢出N到您的全局名称空间


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

此外,我将接受任何改进我当前代码的建议。谢谢:。。。。用于此目的。您的任何函数都不会执行。请发表一篇文章。我建议编辑并删除很多和当前问题没有直接关系的代码,即edata@HarshitSeksaria也是正确的,您可能会在代码审查方面获得比这里更好的反馈。非常感谢大家抽出时间^ ^ edata=print[sheet.popsheet.random.cell.value0,col]是的,我明白了。您正试图从其他函数调用它。请在调用它之前定义它。查看此链接:这就是为什么在另一个函数中有一个全局变量可以使用该变量在调用它之前将其定义为在调用函数之前将其定义为在正在定义的函数中。也许我应该更清楚一点