在编译之前用Python抑制SyntaxWarning

时间:2013-05-11 01:11:56

标签: python tkinter

我正在使用Python 2.7,并且一直在试验Python的Tkinter模块。我尝试构建一个可接受两个输入的计算器,并将它们输入到我自己设计的功能中。然后我尝试定义一个函数,让我可以全局替换其中一个输入,这样它就可以被其他所有函数接受(而不是每次运行程序时都只限于两个输入)。

此解决方案完美无缺;不幸的是,它还在代码执行之前在我的命令窗口中引发了一个SyntaxWarning,我不想看到它。我已经用尽了关于抑制警告的文件,遗憾的是警告.filterwarnings()并没有得到我的救援。我被引导认为问题在于编译,而不是执行。

我很欣赏这方面的任何建议或帮助,或者有人可以告诉我如何修改我的语法以达到同样的效果。

我正在使用Button小部件,当我在他们的命令参数中使用一个函数时,它似乎只是按我想要的方式工作,所以除非有人能告诉我如何超越那里只使用函数,我不能很清楚如何修改我的语法。

以下是代码:

from Tkinter import *

n1 = int(raw_input("N1?"))
n2 = int(raw_input("N2?"))

def add():
    print n1+n2
def multiply():
    print n1*n2
def power():
    print pow(n1,n2)
def replacen1():
    N1 = int(raw_input("Enter n1 replacement here"))
    n1 = N1
    global n1
def replacen2():
    N2 = int(raw_input("Enter n2 replacement here"))
    n2 = N2
    global n2

Button(text = "Add",command = add).pack(side=LEFT)
Button(text = "Multiply", command = multiply).pack(side=LEFT)
Button(text = "Power", command = power).pack(side=LEFT)
Button(text = "Replace N1?", command = replacen1).pack(side=LEFT)
Button(text = "Replace N2?", command = replacen2).pack(side=LEFT)
mainloop()

1 个答案:

答案 0 :(得分:4)

除非它们真的不受你的控制,否则不要压制警告。阅读他们所说的内容:

SyntaxWarning: name 'n1' is assigned to before global declaration

警告表示您在将n1声明为global n1全局之前已分配给global n1。因此,要修复代码,请将n1行移至功能顶部(或指定给def replacen1(): global n1 N1 = int(raw_input("Enter n1 replacement here")) n1 = N1 的位置上方的任何位置):

n2

对{{1}}执行相同的操作。