【发布时间】:2019-04-03 16:15:53
【问题描述】:
我正在使用 python 3.6,我写了这个:
zen = 1
zen2 = True
def test():
if zen == 1 and zen2 == True:
print ("hello")
global zen2
zen2 = False
else:
print ("hello 2")
test()
...输出什么都没有!纳达!没有“hello”也没有“hello 2”,甚至没有错误!
即使我这样做:
zen = 1
zen2 = True
def test():
if zen == 1 :
if zen2 == True:
print ("hello")
global zen2
zen2 = False
else:
pass
else:
print ("hello 2")
test()
还是什么都没有!为什么?
编辑:对不起大家,在此之前我没有注意到“else”没有冒号,所以对于某些人来说,他们遇到了语法错误,现在可能已修复,但它仍然没有输出任何内容
编辑 2:这会很尴尬,因为我使用的是 PyCharm 并且我的另一个文件是打开的(在文件中,没有执行任何功能),我不小心运行了另一个文件而不是这个“zen”文件,所以我什么都没有,因为它。实际上,我从这个“zen”文件中得到了一个 SyntaxError,尽管我说这不是问题,但这篇文章确实帮助了我解决问题,它还提醒自己在做任何事情之前要仔细检查所有内容,所以,是的,感谢任何人帮了我:)
【问题讨论】:
-
您的代码无法运行。
-
无法复制。这会在发出语法警告后打印“hello”。
-
您好,@JazzHandy 为了让我们帮助您,我们需要一个示例来重现您所看到的行为。本例我运行代码时,效果和你预期的一样:ideone.com/eE50Lw
-
Python2 中的 IIRC,
test()中使用的zen和zen2将被视为全局变量。在 Python3 中,它们是局部变量,除非您专门将它们设为全局变量。您正在使用global,但为时已晚并且在错误的位置(在条件之后)。所以本地的zen和zen2都得到None的默认值。 -
我很惊讶有几个不同的 cmets 关于它是否运行。我得到:
SyntaxError: name 'zen2' is used prior to global declaration。 @JazzHandy 这绝对是一个范围问题。
标签: python