
你是不是也有过这样的经历?
刚写完一段Python代码,满怀期待地运行...
结果屏幕上跳出一堆红色报错,瞬间头大?
说实话,我之前也是这样。每次看到报错,心里就咯噔一下,不知道从哪下手。
直到我发现了一个秘密:
这些报错其实都在"说人话",你只是没听懂它在说什么而已。
语法错误是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 = 10
number.append(5) # 数字没有append方法
怎么解决?
hasattr()先判断一下有没有这个属性💡 金句变量是代码的基石,未定义的变量就是空中楼阁!

这类错误,就是你想干一些"不合理"的事情。
你想把数字和字符串加在一起!
result = 10 + "hello" # 这咋加?
怎么解决?
先统一类型再操作:
result = str(10) + "hello" # "10hello"
result = 10 + int("20") # 30
你把不是函数的东西当函数用了!
sum = 0
total = 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 / divisor
else:
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在告诉你问题出在哪。
学会了报错语言,你就能更快地找到问题,写出更健壮的代码。
“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!