我的全局变量定义被重置为“无”

时间:2019-01-05 15:47:27

标签: python global-variables global

我注意到,当我在该start()函数中使用“ global board”这一行时,最终在执行时遇到以下错误。当我删除它时,我不会!

但是我似乎需要全局定义才能使代码正常工作,否则无法识别电路板。我该怎么办?

print(board[i][j] + " ", end = " ")

TypeError: 'NoneType' object is not subscriptable

这是代码:

def start():
    global board
    board = create_board()
    print_board()

def print_board():
    global board
    print("    1  2  3  4  5")
    print("  ---------------")
    ch = "A"
    for i in range(0, 5):
        print(ch, "|", end = " ")
        for j in range(0, 5):
            print(board[i][j] + " ", end = " ")
        print()
        ch = chr(ord(ch) + 1)
    print()


def create_board():
    global board
    m = 'M'
    r = 'R'
    board = [[r, r, r, r, m],
             [r, r, r, r, r],
             [r, r, m, r, r],
             [r, r, r, r, r],
             [m, r, r, r, r]]

start()

1 个答案:

答案 0 :(得分:0)

您的问题是您将电路板分配为等于函数返回的值,但是您没有从函数返回任何值。

该函数按如下方式分配全局板变量:

board = [[r, r, r, r, m],
         [r, r, r, r, r],
         [r, r, m, r, r],
         [r, r, r, r, r],
         [m, r, r, r, r]]

但是您的函数什么也不返回(无):

def create_board():
    global board
    m = 'M'
    r = 'R'
    board = [[r, r, r, r, m],
             [r, r, r, r, r],
             [r, r, m, r, r],
             [r, r, r, r, r],
             [m, r, r, r, r]]
    # ends without returning anything..

然后将“ None”分配给板,撤消create_board函数对板所做的操作:

board = create_board()  # create_board = None/nothing!

稍后,在发生错误的行中,board = None

您应该只运行“ create_board()”或让create_board返回该值,而不是仅仅对其进行修改。为什么不应该使用全局变量的另一个很好的例子...

在类似set_board之类的函数中,您也会遇到其他错误。