老邓给大家整理了30个 Python 新手常见的错误,并提供了代码示例、注释和解决方案。
1. `SyntaxError: invalid syntax`
-
这是 Python 最常见的错误之一,表示代码违反了 Python 的语法规则。
# 缺少冒号
if x > 5
print("x > 5")
# 错误的赋值
5 = x
解决方案:仔细检查代码,确保符合 Python 的语法规则。尤其注意冒号、括号、引号等符号的使用。查阅 Python 官方文档可以帮助理解正确的语法。
2. `SyntaxError: non-default argument follows default argument`
-
函数定义中,默认参数必须放在非默认参数之后。
def func(a=1, b):
print(a, b)
解决方案:将默认参数放在非默认参数之后。
def func(b, a=1):
print(a, b)
3. `SyntaxError: invalid character in identifier`
-
标识符中包含了无效字符,例如中文标点符号。
变量名=10 # 使用了中文等号
解决方案:使用英文标点符号和字母、数字、下划线组成标识符。
4. `TypeError: can only concatenate str (not "XXX") to str`
-
尝试将字符串与非字符串类型进行拼接。
age = 20
print("My age is " + age)
解决方案:将非字符串类型转换为字符串再进行拼接。
age = 20
print("My age is " + str(age))
5. `TypeError: f takes exactly 2 arguments (1 given)`
-
函数调用时参数数量不匹配。
def add(x, y):
return x + y
result = add(5)
解决方案:提供正确的参数数量。
result = add(5, 3)
6. `TypeError: 'tuple' object does not support item assignment`
-
尝试修改元组元素。元组是不可变的。
my_tuple = (1, 2, 3)
my_tuple[0] = 4
解决方案:如果需要修改,使用列表代替元组。
7. `ValueError: could not convert string to float: '12.2s'`
-
尝试将包含非数字字符的字符串转换为浮点数。
float('12.2s')
解决方案:去除字符串中的非数字字符,或者进行错误处理。
8. `ValueError: invalid literal for int with base 10`
-
尝试将包含非数字字符的字符串转换为整数。
int('12a')
解决方案:去除字符串中的非数字字符,或者进行错误处理。
9. `ValueError: substring not found`
-
使用 str.index() 或其他字符串方法查找不存在的子字符串。
"hello".index("world")
解决方案:使用 in 或 find() 方法检查子字符串是否存在,或者使用 try-except 块处理异常。
10. `ZeroDivisionError: division by zero`
-
除数为零。
10 / 0
解决方案:检查除数是否为零,或者使用 try-except 块处理异常。
11. `AttributeError: 'module' object has no attribute 'xxx'`
-
模块中不存在指定的属性。
import math
math.sinn(0) # 拼写错误
解决方案:检查属性名称是否正确,拼写是否正确。
12. `AttributeError: 'Obj' object has no attribute 'attr'`
-
对象没有指定的属性。
class MyClass:
pass
obj = MyClass()
print(obj.attr) # MyClass 没有定义 attr 属性
解决方案:确保对象拥有指定的属性。
13. `FileExistsError: [Errno 17] File exists`
-
尝试创建已存在的文件。
with open("my_file.txt", "x") as f: # x 模式用于创建文件,如果文件已存在会报错
f.write("Hello")
解决方案:使用 w 模式覆盖现有文件,或者使用 a 模式追加内容。
14. `FileNotFoundError: [Errno 2] No such file or directory`
-
尝试打开不存在的文件。
with open("non_existent_file.txt", "r") as f:
content = f.read()
解决方案:检查文件路径是否正确,确保文件存在。
15. `IndentationError: expected an indented block`
-
代码块缩进错误,缺少缩进。
if x > 5:
print("x > 5")
解决方案:添加正确的缩进。
16. `IndentationError: unexpected indent`
-
代码块缩进错误,出现意外的缩进。
print("Hello")
print("World")
解决方案:删除意外的缩进。
17. `IndentationError: unindent does not match any outer indentation level`
-
代码块缩进错误,取消缩进的级别与任何外部缩进级别都不匹配。
if x > 5:
print("x > 5")
print("Done")
-
解决方案:调整缩进,使其与外部缩进级别匹配。
18. `IndexError: list index out of range`
-
访问列表中不存在的索引。
my_list = [1, 2, 3]
print(my_list[3])
解决方案:确保索引在列表的范围内。
19. `IsADirectoryError: [Errno 21] Is a directory`
-
尝试对目录执行文件操作。
with open("my_directory", "r") as f: # my_directory 是一个目录
content = f.read()
解决方案:确保操作的对象是文件,而不是目录。
20. `KeyError: 'age'`
-
访问字典中不存在的键。
my_dict = {"name": "Alice"}
print(my_dict["age"])
解决方案:使用 in 运算符检查键是否存在,或者使用 get() 方法安全地访问键。
21. `ModuleNotFoundError: No module named 'pymysql'`
-
未安装指定的模块。
import pymysql
解决方案:使用 pip install pymysql 安装模块。
22. `NameError: name 'test' is not defined`
-
使用了未定义的变量。
print(test) # test 未定义
解决方案:定义变量后再使用。
23. `RecursionError: maximum recursion depth exceeded in comparison`
-
递归深度超过了限制。
def infinite_recursion():
infinite_recursion()
infinite_recursion()
解决方案:检查递归函数的终止条件,确保递归能够结束。
24. `TimeoutError: [WinError 10060] No response or response from host after a period of time. Connection attempt failed.`
-
网络连接超时。
import socket
# ... 网络操作 ...
解决方案:检查网络连接,增加超时时间,或者进行错误处理。
25. `TypeError: unsupported operand type(s) for +: 'int' and 'str'`
-
尝试对不支持的类型进行操作,例如将整数和字符串相加。
num = 10
string = "20"
result = num + string
解决方案:将操作数转换为合适的类型,例如使用 int(string) 将字符串转换为整数。
26. `TypeError: 'str' object cannot be interpreted as an integer`
-
将字符串传递给需要整数的函数或操作。
string = "10"
for i in range(string):
print(i)
解决方案:使用 int(string) 将字符串转换为整数。
27. `UnboundLocalError: local variable 'x' referenced before assignment`
-
在函数内部尝试访问在函数内部赋值之前引用的局部变量。
def my_function():
print(x) # x 在这里还没有被赋值
x = 10
my_function()
解决方案:在引用局部变量之前先进行赋值,或者将其声明为全局变量(如果确实需要访问全局变量)。
28. `TypeError: unhashable type: 'list'`
-
尝试将不可哈希的类型(例如列表)用作字典的键或集合的元素。
my_dict = {[1, 2]: "value"} # 列表不能作为字典的键
解决方案:使用可哈希的类型,例如元组或字符串。
29. `MemoryError`
-
程序试图使用超过可用内存的内存。
very_large_list = [i for i in range(10**10)] # 创建一个非常大的列表
解决方案:优化代码,减少内存使用,例如使用生成器或迭代器,或者分批处理数据。
30. `OverflowError: math range error`
-
数学运算的结果超出了可表示的范围。
import math
result = math.exp(1000) # exp(1000) 的结果太大
解决方案:使用能够处理更大数值范围的库,或者调整计算方法。
希望这30个常见的 Python 错误及其解决方案能够帮助你更好地理解和解决 Python 编程中遇到的问题。
全套Python学习资料分享:
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
三、python入门资料大全
四、python进阶资料大全
五、python爬虫专栏
六、入门学习视频全套
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
七、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
八、python最新面试题
标签:缩进,必看,Python,解决方案,字符串,Python30,print,速查,my From: https://blog.csdn.net/qq_36807888/article/details/144657716