我正在编写我的第一个Python脚本并收到错误NameError: global name 'board' is not defined
。为什么python会抛出这个错误,怎么修复呢?
class Screen(QtGui.QMainWindow):
def __init__(self):
super(Screen, self).__init__()
self.initUI()
def toggleLED(self, pressed):
source = self.sender()
if self.LedOn:
source.setText('LED Off')
self.LedOn = 0
board.setHigh(13)
else:
source.setText('LED On')
self.LedOn = 1
board.setLow(13)
def main():
app = QtGui.QApplication(sys.argv)
screen = Screen()
board = Arduino('COM3')
sys.exit(app.exec_())
if __name__ == '__main__':
main()
答案 0 :(得分:5)
名为board
的变量是main()
的本地变量,在Screen
类的实例中不可见。
解决此问题的最简洁方法可能是让Screen
的实例保留对board
的引用:
class Screen(QtGui.QMainWindow):
def __init__(self, board):
super(Screen, self).__init__()
self.board = board
self.initUI()
def toggleLED(self, pressed):
source = self.sender()
if self.LedOn:
source.setText('LED Off')
self.LedOn = 0
self.board.setHigh(13)
else:
source.setText('LED On')
self.LedOn = 1
self.board.setLow(13)
def main():
app = QtGui.QApplication(sys.argv)
board = Arduino('COM3')
screen = Screen(board)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
答案 1 :(得分:1)
toggleLED
中有几行引用了一个名为board
的变量,但board
永远不会定义在该方法范围内可以访问的任何位置。
您可能希望在创建board
对象时将其传递给Screen
,以便Screen
实例具有对该对象的引用。有很多方法可以做到这一点;如果某个板对Screen
的功能至关重要,我会把它放在初始化器中:
def __init__(self, board):
super(Screen, self).__init__()
self.initUI()
self.board = board
然后,您可以在需要访问该实例的任何地方引用self.board
(当然在Screen
课程内)。