python函数的默认参数引发报错-反直觉的报错

51 阅读1分钟
global_config = None


def func(config=global_config["a"]):
    print(1)


def func2():
    print(2)


func2()

上面这段代码是会报错的,报错信息如下:

File xx.py, line 4, in <module>
    def func(config=global_config["a"]):
                    ~~~~~~~~~~~~~^^^^^
TypeError: 'NoneType' object is not subscriptable

很反直觉对吧,明明没有用到func怎么还报错呢。

原因

仔细想想也合理。

python文件执行每一行代码,遇到def就记住这个函数变量。这里很正常。

但同时,它还会计算一下这个函数的默认的参数。