
你是不是也有过这样的经历?
刚写完一段Python代码,满怀期待地运行...
结果屏幕上跳出一堆红色报错,瞬间头大?
说实话,我之前也是这样。每次看到报错,心里就咯噔一下,不知道从哪下手。
直到我发现了一个秘密:
这些报错其实都在"说人话",你只是没听懂它在说什么而已。
往期阅读>>>
Python 自动化管理Jenkins的15个实用脚本,提升效率
App2Docker:如何无需编写Dockerfile也可以创建容器镜像
Python 自动化识别Nginx配置并导出为excel文件,提升Nginx管理效率
语法错误是Python最基础的问题,就像写作文时写错了字,老师根本看不懂你想表达什么。
这是什么鬼?其实就是你代码里有明显的语法错误。
比如:
:( 和 )怎么解决?
报错信息会告诉你哪一行出错,就去那一行检查呗,特别注意冒号和括号!
"EOF"是End of File的缩写,意思是文件结束了,但语句还没写完。
常见情况:
if x > 5 # 后面啥都没有,Python不知道要干嘛怎么解决?
要么补上代码块,要么加个pass占位:
if x > 5: pass # 就当我在这里写了代码字符串没写完!
message = "Hello world # 缺了个引号怎么解决?
检查引号是不是成对出现,单引号配单引号,双引号配双引号。
Python强制缩进,你没缩进!
if x > 5:print("x大于5") # 这行应该缩进怎么解决?
在if、for、def这些关键字后面,记得缩进(推荐4个空格)。
缩进乱套了!
可能是混用了空格和Tab,或者缩进层级不一致。
怎么解决?
统一用空格或Tab(推荐空格),编辑器里设置成Tab转4个空格最省心。
💡 金句缩进是Python的灵魂,混乱的缩进就是灵魂出窍!

这类错误,说白了就是你叫了一个Python不认识的名字。
你用了变量name,但Python从来没见过这个变量!
print(username) # username从来没定义过怎么解决?
在函数里用了局部变量,但还没赋值就用上了。
def get_age(): print(age) # age还没赋值 age = 18怎么解决?
先赋值再用,或者用global声明成全局变量。
你想用对象的某个属性,但这个对象根本没有这个属性!
number = 10number.append(5) # 数字没有append方法怎么解决?
hasattr()先判断一下有没有这个属性💡 金句变量是代码的基石,未定义的变量就是空中楼阁!

这类错误,就是你想干一些"不合理"的事情。
你想把数字和字符串加在一起!
result = 10 + "hello" # 这咋加?怎么解决?
先统一类型再操作:
result = str(10) + "hello" # "10hello"result = 10 + int("20") # 30你把不是函数的东西当函数用了!
sum = 0total = sum([1,2,3]) # sum现在是个数字,不是函数了怎么解决?
别用内置函数名做变量名!
调用函数时忘了传参数!
def greet(name): print(f"Hello, {name}")greet() # 忘了传name怎么解决?
检查函数定义,看缺哪个参数,补上就行。
你想把字符串转成数字,但字符串根本不是数字!
age = int("十八") # 这能转成数字吗?怎么解决?
用try-except处理异常,或者先验证字符串内容:
try: age = int("18")except ValueError: print("请输入有效的数字")解包时变量不够用!
a, b = [1, 2, 3] # 3个值给2个变量?怎么解决?
用*接收多余值:
a, *b = [1, 2, 3] # a=1, b=[2,3]解包时变量多了!
a, b, c = [1, 2] # 2个值给3个变量?怎么解决?
确保列表长度和变量数量一致。
💡 金句类型不兼容,就像鱼和熊掌不可兼得!

这类错误,就是你访问了一些不存在的内容。
列表索引超出范围!
fruits = ["apple", "banana"]print(fruits[2]) # 只有0和1,哪来的2?怎么解决?
用len()检查列表长度,或者用try-except处理:
if index < len(fruits): print(fruits[index])else: print("索引超出范围")字典里没有这个键!
scores = {"Alice": 90}print(scores["Bob"]) # 字典里没有Bob怎么解决?
用get()方法或先检查:
print(scores.get("Bob", "不存在"))# 或if "Bob" in scores: print(scores["Bob"])迭代器已经用完了,你还想继续迭代!
iterator = iter([1, 2])next(iterator)next(iterator)next(iterator) # 这时候已经没东西了怎么解决?
用for循环自动处理,或者在try-except里用next()。
💡 金句索引越界,就像伸手去够天上的星星!
这类错误,就是你想要用一些Python找不到的东西。
你想导入一个模块,但Python找不到!
import requests # 没安装requests库怎么解决?
安装这个模块:
pip install requests模块里没有你想要导入的东西!
from math import square # math模块里没有square函数怎么解决?
检查模块内容,或者看看是不是拼写错了。
递归太深,Python撑不住了!
def factorial(n): return n * factorial(n-1) # 没有终止条件怎么解决?
优化递归逻辑,加个终止条件,或者用迭代代替递归。
💡 金句递归太深,就像掉进了无底洞!
这类错误,就是你在操作文件时出了问题。
文件不存在!
with open("不存在的文件.txt") as f: pass怎么解决?
检查文件路径对不对,文件是不是在当前目录,用os.path.exists()先检查一下。
权限不够!
可能是:
怎么解决?
检查文件权限,或者用管理员权限运行程序。
你想打开一个目录,但它是个文件夹!
with open("我的文件夹") as f: # 这是个目录,不是文件 pass怎么解决?
确认路径是文件还是目录。
文件编码不对!
with open("gbk编码.txt") as f: # 文件是gbk编码,但用utf-8打开 pass怎么解决?
用正确的编码打开:
with open("gbk编码.txt", encoding="gbk") as f: pass💡 金句文件不存在,就像找一个根本不存在的朋友!
这些错误虽然不那么常见,但遇到了也别慌。
除数为零!
result = 10 / 0 # 这咋除?怎么解决?
除法前检查除数:
if divisor != 0: result = 10 / divisorelse: print("除数不能为零")运算结果太大,超出了表示范围!
result = 10 ** 1000 # 这数字太大了吧?怎么解决?
用decimal或fractions模块处理高精度计算。
内存不够用了!
怎么解决?
优化算法,减少大对象创建,或者用生成器。
assert断言失败!
assert 1 == 2 # 这条件是False,断言失败怎么解决?
检查断言条件对不对,调试时可以用python -O禁用断言。
用户按了Ctrl+C,中断了程序!
怎么解决?
用try-except捕获,优雅退出:
try: # 你的代码except KeyboardInterrupt: print("程序被用户中断") # 清理资源调用了sys.exit(),正常退出。
怎么解决?
这是正常的退出信号,不需要处理。但可以在try-finally里做清理工作。
💡 金句错误不可怕,可怕的是不知道错误在哪!
掌握了这30个常见报错,你的Python之路会顺畅很多。
但更重要的是,要养成这些好习惯:
try-except进行异常处理print()或调试器定位问题记住:报错不是你的敌人,它是Python在告诉你问题出在哪。
学会了报错语言,你就能更快地找到问题,写出更健壮的代码。

想高效学习Python?下面三本精选好书满足你的不同需求!
《流畅的Python(第2版)》——Python进阶必读!深入讲解高级特性与最佳实践,适合想精进的开发者。
《Python从新手到高手》:初学者首选,系统学习全栈技能。
《Python数据分析:从零基础入门到案例实战》——数据科学利器!手把手教你用Python处理数据,实战案例学完就能用。
三本书均支持先用后付、运费险和7天无理由退货,放心购买!点击“购买”按钮,立即开启你的Python学习之旅吧!
https://ima.qq.com/wiki/?shareId=f2628818f0874da17b71ffa0e5e8408114e7dbad46f1745bbd1cc1365277631c
