“名称‘x’是参数和全局”异常

新手上路,请多包涵

我想知道为什么这行不通?我是编程新手,正在学习 Python。

 def convert(x,y):
    while True:
        try:
            global x
            x = int(input("Number: "))
        except ValueError:
            print("Make sure it is a number.")
    while True:
        try:
            global y
            y = int(input("Number: "))
        except ValueError:
            print("Make sure it is a number.")

convert(x,y)

请告诉我如何进行这项工作。

另外,我在运行时得到的错误是名称“x”是参数和全局。

好的,我修好了。这是正确的代码。

 def convert():
    while True:
        try:
            global number
            number = int(input("Number: "))
            break
        except ValueError:
            print("Make sure it is a number.")
    while True:
        try:
            global number2
            number2 = int(input("Number: "))
            break
        except ValueError:
            print("Make sure it is a number.")

convert()

原文由 Suds2 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 334
2 个回答

这是因为您试图覆盖参数 x ,但您不能。 这是一个相关的问题

要解决此问题, 请不要 将变量命名为。你的代码几乎是:

 x = 'hi'
x = 5
print(x)
# Why isn't this 'hi'?


顺便说一句,您的 while 循环将无限期地运行。在 x = int(input("Number: ")) 之后,您可能想要添加一个 break 。另一个循环也一样。

原文由 TerryA 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Python 中,函数的参数(定义旁边括号中的内容)作为局部变量添加到代码中的函数范围内。 Python 解释器会对您的代码进行几次主要扫描。第一个是语法扫描,它会根据 Python 的规则测试您的程序在语法上是否正确。这些规则之一是,对于具有自己作用域的给定代码块,您不能拥有同时位于局部名称空间和全局名称空间中的变量。

在此扫描中,它会在运行代码之前为您进行一些特殊检查。它存储所有全局变量和局部变量的名称,并相互检查它们。由于函数的参数必须在函数范围内被视为“局部”,因此不能在函数定义内将它们声明为“全局”,因为这会产生矛盾。

您可以做的是在您的函数定义之前声明 xy 是全局的,这样就可以了。

原文由 Shashank 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题