是不是很多刚学 Python 的朋友都有这样的经历?代码明明照着教程敲的,一运行就报错;控制台红通通一片,错误提示看得一头雾水;好不容易解决了语法问题,结果程序运行结果完全不对?其实啊,Python 的错误看着五花八门,新手常犯的也就那么二十来种。今天兔子哥就把这些高频错误拆解开,从语法报错到逻辑问题,每个都给解决办法,新手照着避坑,写代码能顺多了,一起往下看吧!
一、语法错误:最容易犯也最好解决的错
核心问题:为啥写着写着就报 SyntaxError?多半是语法格式没对
Python 对语法格式特别 “较真”,少个冒号、缩进不对都会报错,这 5 个错误新手几乎都踩过。
错误 1:缩进错误(IndentationError)
Python 用缩进来区分代码块,而不是大括号。最常见的错是 “该缩进的没缩进” 或 “缩进混用空格和 Tab”。
错误代码:
python
if a > 5:print("大于5") # 这里没缩进,会报错解决方法:用 4 个空格缩进(别用 Tab,或设置编辑器自动把 Tab 转空格),代码块(if、for、函数内)必须缩进,比如:
python
if a > 5:print("大于5") # 缩进4个空格,正确错误 2:括号 / 引号没闭合或 mismatch
比如写
print("Hello忘了加闭合引号,或(1 + 2 * 3漏了右括号,Python 会报 “EOL while scanning string literal”。错误代码:
python
name = "兔子哥 # 引号没闭合result = (10 / 2 + 3 # 括号没闭合解决方法:写括号或引号时 “成对写”,敲完
(就先加),写完"就补",养成习惯就不容易忘。错误 3:冒号漏写(最容易忽略的小错)
if、for、while、函数定义等后面必须加冒号
:,漏写就会报 SyntaxError。错误代码:
python
if age > 18 # 这里漏了冒号print("成年了")解决方法:写完条件或函数名后,下意识加个冒号,比如
if age > 18:、def func():。错误 4:变量名不符合规则
变量名只能包含字母、数字、下划线,且不能以数字开头,也不能用 Python 关键字(比如 if、for、def)。
错误代码:
python
1name = "小明" # 以数字开头if = 10 # 用关键字当变量名解决方法:变量名用字母开头,比如
name1;避开关键字,不确定就查 Python 关键字列表。错误 5:print 语句括号问题(Python 3 特有)
Python 3 里 print 必须加括号,比如
print("Hello"),写成print "Hello"会报错。错误代码:
python
print "Hello World" # Python 3不支持这种写法解决方法:记住 Python 3 的 print 是函数,必须带括号:
print("Hello World")。二、逻辑错误:语法没错但结果不对,最让人头疼的错
核心问题:代码能运行,但结果不对,问题出在哪?
这类错误语法没错,但逻辑有问题,得靠调试才能发现,这 5 个错误新手尤其要注意。
错误 6:循环条件写错,导致死循环
while 循环的条件如果永远为 True,程序会一直跑停不下来,比如 “计数器忘了加 1”。
错误代码:
python
count = 0while count < 5:print(count) # 这里没写count += 1,count永远是0,死循环解决方法:循环里一定要有让条件变化的语句,比如
count += 1,确保循环能结束。错误 7:列表索引越界(IndexError)
列表索引从 0 开始,比如
[1,2,3]的索引是 0、1、2,访问索引 3 就会越界。错误代码:
python
nums = [10, 20, 30]print(nums[3]) # 最大索引是2,这里越界了解决方法:用
len(nums)看列表长度,索引最大为len(nums)-1;循环时别超过这个范围。错误 8:字符串拼接类型错误(TypeError)
字符串只能和字符串拼接,不能直接和数字或其他类型拼,否则会报 “can only concatenate str (not "int") to str”。
错误代码:
python
age = 18print("年龄是:" + age) # age是数字,不能直接拼字符串解决方法:把数字转成字符串再拼,用
str(age),比如:python
print("年龄是:" + str(age)) # 正确# 或用f-string更方便:print(f"年龄是:{age}")错误 9:if 条件判断用赋值号 = instead of 等于号 ==
把
if a == 5写成if a = 5,赋值语句在条件里永远为 True,逻辑全错。错误代码:
python
a = 3if a = 5: # 这里应该用==,用=变成赋值了print("等于5")解决方法:记牢 “判断相等用 ==,赋值用 =”,写 if 条件时多检查一遍。
错误 10:函数里忘了写 return,导致结果为 None
定义函数时想返回结果,却忘了写 return,调用函数得到的永远是 None。
错误代码:
python
def add(a, b):sum = a + b # 忘了写return sumresult = add(2, 3)print(result) # 输出None,不是5解决方法:函数要返回结果就必须写
return 结果,比如return sum。三、库使用错误:导入和调用第三方库时的坑
核心问题:用第三方库时总报 ImportError 或 AttributeError?
Python 的强大在于库多,但用库时没装对或调用错方法也容易出错,这 5 个错误很常见。
错误 11:没安装库就导入,报 ImportError
用
import pandas前没安装 pandas,会报 “No module named 'pandas'”。错误代码:
python
import pandas # 没安装pandas时会报错解决方法:用 pip 安装库,比如
pip install pandas,确保安装成功再导入。错误 12:库名或方法名拼写错误
把
import requests写成import requets,或pd.read_csv写成pd.read_cvs,都会报找不到模块或方法。错误代码:
python
import requets # 库名少了个eimport pandas as pddata = pd.read_cvs("data.csv") # csv写成cvs解决方法:拼写时仔细点,不确定就查官方文档;用带自动提示的编辑器(比如 PyCharm)能减少拼写错。
错误 13:导入方式不对,调用方法时少前缀
用
from requests import get导入后,直接用get();但用import requests导入后,必须用requests.get()。错误代码:
python
import requestsresponse = get("https://www.baidu.com") # 少了requests.前缀解决方法:记清两种导入方式的调用区别:全导入加前缀,部分导入可直接用。
错误 14:Pandas 读取文件路径错误
用
pd.read_csv("data.csv")时,文件不在代码同目录,又没写绝对路径,会报 “FileNotFoundError”。错误代码:
python
import pandas as pddata = pd.read_csv("data.csv") # 文件不在当前目录解决方法:要么把文件放代码同目录,要么写绝对路径,比如
pd.read_csv("C:/data/data.csv")。错误 15:忘记加括号调用函数
把
print("Hello")写成print,或len(list)写成len,会导致结果不对或报 “'builtin_function_or_method' object is not subscriptable”。错误代码:
python
nums = [1, 2, 3]print(len) # 没加括号,打印的是函数本身,不是长度解决方法:调用函数必须加括号,哪怕没参数,比如
len(nums)、print()。四、其他高频错误:新手容易忽略的细节错
核心问题:这些错误不常遇到,但遇到了很难排查
最后 5 个错误虽然出现频率稍低,但新手一旦遇到,很容易卡壳半天。
错误 16:变量作用域问题,函数内用全局变量没声明
函数里想修改全局变量,没加
global声明,会被当成局部变量,修改无效。错误代码:
python
count = 0def add_count():count = count + 1 # 想改全局变量count,没声明add_count()print(count) # 还是0,没被修改解决方法:函数内修改全局变量前加
global声明:python
def add_count():global count # 声明用全局变量count = count + 1错误 17:字符串转数字失败(ValueError)
用
int("123")没问题,但转int("abc")或int("12.3")会报错,因为字符串不是纯整数。错误代码:
python
num = int("12.3") # 带小数点,不能直接转int解决方法:先转 float 再转 int,比如
int(float("12.3"));或确保字符串是纯数字。错误 18:for 循环遍历列表时修改列表
遍历列表时删除或添加元素,会导致遍历不完整或报错,比如:
错误代码:
python
nums = [1, 2, 3, 4]for num in nums:if num % 2 == 0:nums.remove(num) # 遍历中删除元素,会跳过后面的元素print(nums) # 结果是[1, 3],但实际想删所有偶数解决方法:遍历列表的副本,比如
for num in nums.copy():,再修改原列表。错误 19:误用 “==” 比较列表 / 字典
列表或字典用
==比较内容,但用is比较的是内存地址,新手容易搞混。错误代码:
python
a = [1, 2]b = [1, 2]print(a is b) # 输出False,因为内存地址不同解决方法:比较内容用
==,比如print(a == b)(输出 True);is用来判断是否是同一个对象。错误 20:中文编码问题(Python 2 常见,Python 3 少见但仍可能)
Python 3 默认支持中文,但如果文件头没加编码声明,或读取文件时编码不对,可能出现乱码。
错误代码:
python
# 读取utf-8编码的文件,用了gbk编码with open("data.txt", "r", encoding="gbk") as f: # 文件实际是utf-8content = f.read() # 可能乱码或报错解决方法:读取文件时指定正确编码,比如
encoding="utf-8";不确定就试试常见编码(utf-8、gbk)。新手避坑小技巧(兔子哥实战经验)
- 学会看错误提示:错误提示里的 “File "xxx.py", line 5” 告诉你错误在第 5 行,“IndentationError” 说明是缩进错,跟着提示找问题。
- 用 print 调试:程序结果不对时,在关键步骤加
print(变量名),看看变量值是不是你想的那样,很多逻辑错误一打印就清楚。 - 从小程序练起:别一开始就写复杂代码,先写几行的小程序,确保每步都对,再慢慢加功能。
- 善用搜索引擎:遇到错误把错误提示复制去搜,90% 的问题别人都遇到过,有现成答案。
最后跟大家说句实在的,学 Python 哪有不犯错的?兔子哥刚开始写循环时,死循环把电脑卡到死机;调用 Pandas 时,因为拼错
read_csv调试了半小时。但这些错误都是必经之路,踩过一次记住了,下次就不会再犯。别害怕报错,错误提示其实是在帮你成长,每个错误都能让你更了解 Python 的规则。按今天说的方法避坑、调试,你写代码的速度会越来越快,信心也会越来越足。希望这些解决办法能帮到你,下次遇到错误别慌,一步步排查总能解决!
标签: IndentationError 五花八门
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~