python教程常见错误TOP20:语法报错到逻辑问题一站式解决

admin python教程 4


是不是很多刚学 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)。

新手避坑小技巧(兔子哥实战经验)


  1. 学会看错误提示:错误提示里的 “File "xxx.py", line 5” 告诉你错误在第 5 行,“IndentationError” 说明是缩进错,跟着提示找问题。
  2. 用 print 调试:程序结果不对时,在关键步骤加print(变量名),看看变量值是不是你想的那样,很多逻辑错误一打印就清楚。
  3. 从小程序练起:别一开始就写复杂代码,先写几行的小程序,确保每步都对,再慢慢加功能。
  4. 善用搜索引擎:遇到错误把错误提示复制去搜,90% 的问题别人都遇到过,有现成答案。

最后跟大家说句实在的,学 Python 哪有不犯错的?兔子哥刚开始写循环时,死循环把电脑卡到死机;调用 Pandas 时,因为拼错read_csv调试了半小时。但这些错误都是必经之路,踩过一次记住了,下次就不会再犯。
别害怕报错,错误提示其实是在帮你成长,每个错误都能让你更了解 Python 的规则。按今天说的方法避坑、调试,你写代码的速度会越来越快,信心也会越来越足。希望这些解决办法能帮到你,下次遇到错误别慌,一步步排查总能解决!

标签: IndentationError 五花八门

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~