Python 报错 UnboundLocalError: local variable ‘xxx‘ referenced before assignment

目录

1. 错误信息

2. 解决办法


1. 错误信息

UnboundLocalError: local variable 'xxx' referenced before assignment

即:在赋值之前引用了局部变量'xxx'

引发错误的代码:

import numpy as np


class MarkovChain:

    def __init__(self, init_status: np.array, transfer_matrix: np.array) -> None:
        self.init_status = init_status
        self.transfer_matrix = transfer_matrix

    def get_status(self, transfer_num: int) -> np.array:
        intermediate_statue = self.init_status
        for _ in range(transfer_num):
            current_status = np.dot(intermediate_statue, self.transfer_matrix)
            intermediate_statue = current_status
        return current_status
    

if __name__ == "__main__":
    t0 = np.array([0.3, 0.2, 0.5])
    matrix = np.array([[0.8, 0.15, 0.05], 
                       [0.2, 0.45, 0.35], 
                       [0.1, 0.5, 0.4]])
    markov = MarkovChain(t0, matrix)

    for i in range(10):
        print(markov.get_status(i))
        

报错:

UnboundLocalError: local variable 'current_status' referenced before assignment

2. 解决办法

由于是在赋值之前引用了局部变量,则

import numpy as np


class MarkovChain:

    def __init__(self, init_status: np.array, transfer_matrix: np.array) -> None:
        self.init_status = init_status
        self.transfer_matrix = transfer_matrix

    def get_status(self, transfer_num: int) -> np.array:
        current_status = self.init_status
        for _ in range(transfer_num):
            current_status = np.dot(current_status, self.transfer_matrix)
        return current_status
    

if __name__ == "__main__":
    t0 = np.array([0.3, 0.2, 0.5])
    matrix = np.array([[0.8, 0.15, 0.05], 
                       [0.2, 0.45, 0.35], 
                       [0.1, 0.5, 0.4]])
    markov = MarkovChain(t0, matrix)

    for i in range(10):
        print(markov.get_status(i))
        

就没问题了。

你可能感兴趣的:(Python,python,numpy,开发语言)