社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python代码明明没错,为什么还是运行不了?新手最常见的8种报错一次讲清

码上编程学习社 • 3 周前 • 135 次点击  

 

刚开始学 Python 的时候,最让人头疼的往往不是代码不会写,而是——代码写完了,一运行就是满屏红字。

尤其是新手,看到 SyntaxError、TypeError、NameError 这些英文报错,第一反应往往是:“我代码是不是全写错了?”

其实没那么严重。

Python 的报错信息并不是在“吓你”,而是在告诉你:代码在哪出了问题,以及大概是什么问题。

只要把常见报错认熟,以后再看到红字,基本就知道该从哪里开始检查了。

一、SyntaxError:语法写错了

这是新手最常见的报错之一。

比如:

if age > 18
    print
("成年")

这里 if 后面少了一个冒号 :,Python 无法正确理解代码结构,就会出现 SyntaxError。

遇到这种报错,优先检查括号、引号、冒号、逗号等符号有没有漏写或写错。

二、IndentationError:缩进不正确

Python 对缩进非常严格,例如:

if age > 18:
print
("成年")

print() 本来应该属于 if 里面的代码,却没有缩进。

正确写法:

if age > 18:
    print
("成年" )

所以出现 IndentationError 时,不要急着改逻辑,先检查代码前面的空格和缩进层级。

三、NameError:变量根本不存在

比如:

print(username)

如果前面从来没有定义过 username,Python 就不知道它是什么。

还有一种特别常见的情况:

user_name = "小明"
print
(username)

两个变量看着很像,但名字并不一样。

因此遇到 NameError,重点检查:变量有没有提前定义、名称有没有拼错、大小写是否一致。

四、TypeError:数据类型用错了

例如:

age = 18
print
("年龄:" + age)

字符串不能直接和整数进行这种拼接。

可以改成:

print("年龄:" + str(age))

所以 TypeError 很多时候不是你的程序逻辑错了,而是当前操作不支持这种数据类型组合。

五、IndexError:索引超出范围

例如:

names = ["小明", "小红",


    
 "小李"]
print
(names[3])

列表虽然有3个元素,但 Python 的索引是从 0 开始的。

也就是说:

names[0]
names[1]
names[2]

才是有效位置。

访问 names[3] 就会出现 IndexError。

六、KeyError:字典里没有这个键

例如:

user = {"name": "小明", "age": 18}
print
(user["city"])

因为字典中根本没有 city,所以程序会报 KeyError。

如果不确定某个键是否存在,可以使用:

print(user.get("city"))

这样即使不存在,也不会直接因为这个键而报错。

七、AttributeError:对象没有这个属性或方法

例如:

name = "python"
name.append("!")

字符串没有 append() 方法,所以会出现 AttributeError。

append() 一般用于列表:

names = ["Python"]
names.append("Java")

看到这种报错,先确认:当前变量到底是什么类型,这个类型是否真的支持你调用的方法。

八、FileNotFoundError:文件没找到

比如:

open("data.txt", "r")

如果当前路径下根本没有 data.txt,程序自然找不到。

这时候重点检查的不是 Python 语法,而是文件名、文件路径以及程序当前运行目录。

尤其是在 PyCharm、VS Code 里运行代码时,新手经常以为文件“就在旁边”,实际上程序读取的工作目录可能完全不同。

看到报错,别急着乱改代码

以后再遇到一大串红色报错,可以先看最后几行。

通常你最需要关注的是两个东西:

报错类型 + 报错位置。

比如:

TypeError: ...

先知道它属于 TypeError,再根据提示找到对应代码行,检查数据类型。

慢慢你就会发现,会看报错,本身就是学 Python 很重要的一项能力。

刚开始可能看到红字就头疼,等这几个高频报错见多了以后,你甚至还没看完整段提示,就已经大概知道问题出在哪了。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/200973