第一类报错:
local variable xxx referenced before assignment
#赋值前引用的局部变量xxx
参考链接:https://blog.csdn.net/qq_44198436/article/details/100051651
局部变量指的在函数内部定义并使用的变量,它只在函数内部有效。
全局变量指的是能作用于函数内外的变量,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。
test_1:
def main():
num=5
print(num)
main()
print(num)
报错如下:
NameError: name ‘num’ is not defined
原因解释:
这里是提示num没有被定义,因为num属于在main函数内部的变量,在函数体外面是不会被调用,解释器也不会认识这个num变量,只有当main函数调用时,才可以获得其内部一些变量,这就是局部变量。
修改如下:使用global声明num为全局变量就可以
def main():
global num
num=5
print(num)
main()
print(num)
test_2:
num=10
def main():
print(num)
num=5
print(num)
main()
print(num)
报错如下:
UnboundLocalError: local variable ‘num’ referenced before assignment
原因解释:
这就是赋前引用局部变量,num在main函数外界定义一次,但在main函数内部又定义一次,python将优先处理在函数体内的变量,且调用在定义之前,所以在第三行print(num)报错,后面num变量赋值num=5让num=10失去全局效果。
test_3:
global num
num=10
def main():
print(num)
num=5
print('main:{}'.format(num))
main()
print(num)
报错原因解释:
进一步说明在函数体内部自称一体,num为全局变量,只能保证在函数体内部认识这个num变量,但在函数体内部对num变量进行的改变,依然要保证先赋值后调用。
更改一:
global num
num=10
def main():
#print(num)
num=5
print('main:{}'.format(num))
main()
print(num)
输出:
main:5
10
**更改二:**
global num
num=10
def main():
#print(num)
#num=5
print('main:{}'.format(num))
main()
print(num)
输出:
main:10
10
**更改三:**
num=10
def main():
global num
print(num)
num=5
print('main:{}'.format(num))
main()
print('外部:{}'.format(num))
总结如下:
Python 命名空间查找顺序:
假设我们要使用变量 runoob,则 Python 的查找顺序为:局部的命名空间去 -> 全局命名空间 -> 内置命名空间。
如果找不到变量 runoob,它将放弃查找并引发一个 NameError 异常:
NameError: name ‘runoob’ is not defined。
第二类报错:
TypeError: ‘NoneType‘ object is not subscriptable
第三类报错:
IndexError:list index out of range
第四类报错:
TypeError: init() takes 3 positional arguments but 4 were given
第五类错误:
TypeError: ‘int’ object is not iterable
其他错误::解决方案对象没有属性(在左leetcoad16题:最接近三数之和的题目中遇到的)
AttributeError: ‘Solution’ object has no attribute ‘threeSumClosest’
ret = Solution().threeSumClosest(param_1, param_2)
Line 181 in _driver (Solution.py)
_driver()
Line 192 in
在做leetcoad704二分查找的时候遇到的问题
其他错误:
SyntaxError: cannot assign to subscript here. Maybe you meant ‘==’ instead of ‘=’?
^^^^^^^^^
if nums[mid] = target:
Line 15 (Solution.py)
记录:这里是不能在这里分配下标,必须要用==才行
TypeError: list indices must be integers or slices, not float
if nums[mid] == target:
Line 15 in search (Solution.py)
ret = Solution().search(param_1, param_2)
Line 56 in _driver (Solution.py)
_driver()
Line 67 in
记录:列表必须是整数或者是切片,不能是浮点数
将mid = left +(right - left) /2改为mid = left +(right - left) //2
RecursionError: maximum recursion depth exceeded in comparison
python中在递归达到997层的时候就会报错
‘int’ object is not subscriptable
整数类型不能进行切片操作(能够进行切片即索引的只有:数组、字符串、元组以及range)