Python 如何修复name错误:name';变量名称';没有定义吗?
因此,我得到了错误NameError:name'chris'没有定义,我怀疑它与全局变量和局部变量有关,但是我已经在函数中将'chris'声明为全局变量 代码如下:Python 如何修复name错误:name';变量名称';没有定义吗?,python,variables,tkinter,sqlite,Python,Variables,Tkinter,Sqlite,因此,我得到了错误NameError:name'chris'没有定义,我怀疑它与全局变量和局部变量有关,但是我已经在函数中将'chris'声明为全局变量 代码如下: def ChrisFood(): global chris chris = 1 FoodSelection() def JoshFood(): global josh josh = 1 FoodSelection() def SamFood(): global sam
def ChrisFood():
global chris
chris = 1
FoodSelection()
def JoshFood():
global josh
josh = 1
FoodSelection()
def SamFood():
global sam
sam = 1
FoodSelection()
def DanielFood():
global daniel
daniel = 1
FoodSelection()
def JimFood():
global jim
jim = 1
FoodSelection()
def SeanFood():
global sean
sean = 1
FoodSelection()
def FoodSelection():
global FoodSelectionWindow
FoodSelectionWindow = Tk()
FoodSelectionWindow.configure(bg="black")
DateAdded = datetime.date.today
FoodSelectionPlaceHolder = Label(FoodSelectionWindow, text = "Food selection will be added in the third iteration")
FoodSelectionPlaceHolder.grid(columnspan=10)
if chris == 1:
with db:
cursor.execute(''' INSERT INTO 'Breakfast_History' (CaloriesTotal, DateAdded, PupilNames) VALUES (?,?,?)''',
([TotalCalories, DateAdded, "Chris"]))
elif josh == 1:
with db:
cursor.execute(''' INSERT INTO 'Breakfast_History' (CaloriesTotal, DateAdded, PupilNames) VALUES (?,?,?)''',
([TotalCalories, DateAdded, "Josh"]))
elif sam == 1:
with db:
cursor.execute(''' INSERT INTO 'Breakfast_History' (CaloriesTotal, DateAdded, PupilNames) VALUES (?,?,?)''',
([TotalCalories, DateAdded, "Sam"]))
elif daniel == 1:
with db:
cursor.execute(''' INSERT INTO 'Breakfast_History' (CaloriesTotal, DateAdded, PupilNames) VALUES (?,?,?)''',
([TotalCalories, DateAdded, "Daniel"]))
elif jim == 1:
with db:
cursor.execute(''' INSERT INTO 'Breakfast_History' (CaloriesTotal, DateAdded, PupilNames) VALUES (?,?,?)''',
([TotalCalories, DateAdded, "Jim"]))
elif sean == 1:
with db:
cursor.execute(''' INSERT INTO 'Breakfast_History' (CaloriesTotal, DateAdded, PupilNames) VALUES (?,?,?)''',
([TotalCalories, DateAdded, "Sean"]))
db.commit()
任何帮助都将不胜感激
谢谢。为某个对象定义全局变量并不是为脚本中的所有函数定义全局变量。这不是global的工作方式。全局将局部变量更改为全局范围请参见:
x = 1
def foo():
x = 2 #<--- is a local variable x
def bar():
global x
x = 3 #<--- became the global x
print('changing global x')
foo()
print(x) # 1
bar() #changing global x
print(x) # 3
foo()
print(x) # 3
然后在你的FoodSelection
中,让它接受一个参数,如果关闭它:
def FoodSelection(choice):
#what you have in here skipping to if
if choice == 'chris':
#do chris things
elif choice == 'josh':
#do josh things
如果可能,不要依赖于global
。总有比使用global
更好的方法来做事情。为某个对象定义全局变量并不能为脚本中的所有函数定义它。这不是global的工作方式。全局将局部变量更改为全局范围请参见:
x = 1
def foo():
x = 2 #<--- is a local variable x
def bar():
global x
x = 3 #<--- became the global x
print('changing global x')
foo()
print(x) # 1
bar() #changing global x
print(x) # 3
foo()
print(x) # 3
然后在你的FoodSelection
中,让它接受一个参数,如果关闭它:
def FoodSelection(choice):
#what you have in here skipping to if
if choice == 'chris':
#do chris things
elif choice == 'josh':
#do josh things
如果可能,不要依赖于global
。总有比使用global
FoodSelection
更好的方法,它没有定义chris
,josh
,等等……但是它们已经在其他函数中定义了,它们是全局变量,所以肯定应该在整个代码中定义它们?不,这不是变量作用域的工作方式。同时停止使用global
,如果一个函数需要另一个函数的变量,请将其作为参数传入。FoodSelection
没有chris
,josh
,etc定义了…但是它们已经在其他函数中定义了,它们是全局变量,所以它们肯定应该在整个代码中定义?不,变量作用域不是这样工作的。同时停止使用global
,如果一个函数需要另一个函数的变量,请将其作为参数传入。