资讯动态

Python入门实践:环境装好后如何选工具、写代码、读懂报错

发布时间:2026/9/7 22:57:53 来源:尧图企业网站定制
身边有不少朋友看完入门第一篇把Python环境装好之后就愣在原地了。安装包下载完了、环境变量配好了、python命令在终端里也能敲出版本号了然后呢双击什么用记事本写还是打开那个黑乎乎的窗口就开始打代码这一步犹豫其实比特么装环境还容易劝退人。我当初卡在这的时候最大困惑就是“我到底该用什么写Python”。现在回看这个问题并不复杂但当时没人跟我说清楚导致我走了不少弯路。这篇学习笔记继续记录我自己的入门过程重点解决“环境装好之后怎么办”的问题。覆盖四块内容开发工具怎么选、第一次运行代码的两种方式、变量和数据类型的基本认知、运算符和常见报错的排查思路。这些都是最基础的东西但也是往后写任何程序都绕不开的底子。1. 环境装完后的第一道选择题用什么工具写代码1.1 几种主流工具的真实定位很多人一上来就在PyCharm、VSCode、Jupyter之间反复横跳今天看这个教程推荐A明天看那个教程推荐B半天时间全耗在下载和卸载编辑器上。我先说结论Python写代码的本质只有一个——用文本编辑器写好.py文件再用Python解释器去执行它。所谓IDE和编辑器只是帮你写得更舒服的工具没有任何一个是“必须”的。我用过一轮之后对几个主流工具的真实感受是这样的IDLEPython安装包自带的极简环境。零配置打开就能写但智能提示几乎没有调试功能也弱连代码折叠都没有。坦白说它适合验证“我的Python到底能不能跑”不适合当长期主力工具。PyCharm社区版功能非常完整的IDE代码补全、调试、重构都做得很好对新手极其友好。缺点是启动偏慢、内存占用高对老电脑不太友好。但如果你以后想走软件开发方向我很推荐直接用这个。VSCode Python插件轻量、启动快插件生态丰富装一个Python扩展之后就能写Python。唯一的问题是解释器选择的概念对新手略绕经常出现“装好插件但不知道选哪个解释器”的情况。但适应之后就回不去了。Jupyter Notebook单元格式交互环境一段一段执行结果直接显示在代码下方。做数据分析、机器学习探索性工作时非常好用但它的“代码块是分片状态”的机制容易让人忽略程序整体的执行顺序不适合用来学完整的工程逻辑。1.2 我自己最终选了什么我用的是VSCode理由很简单手头电脑配置一般PyCharm启动太慢而VSCode打开后几秒就能进入状态配合官方Python扩展之后代码补全、检查、运行这些核心体验都不差。就连后来写一些小爬虫、小脚本也始终在用它。需要专门提醒的是VSCode装完Python插件后第一步一定要把“解释器”选对。操作方式是打开命令面板CtrlShiftP输入“Python: Select Interpreter”然后选择你安装的Python版本。很多新手犯的错是代码写好了点运行却提示找不到Python原因往往就是这一步没做。这一步做完VSCode的右下角会显示当前使用的Python版本号看到数字就说明对上了。至于Jupyter我的建议是现在先不碰等学到数据处理相关的库之后再回来体验它的好处。早期打基础阶段规规矩矩写.py文件才能把逻辑和执行顺序的敏感度培养起来。2. 第一次让代码跑起来交互模式与脚本文件的区别2.1 先和Python“对话”REPL交互模式环境备好后最直观的体验方式是在终端输入python进入所谓的交互模式。这个模式叫REPL意思是读取-执行-输出-循环。你输入一行它立刻执行一行并给你结果就像你跟它对话一样。$ python Python 3.12.x (main, ...) Type help, copyright, credits or license for more information. print(hello python) hello python 看到那个提示符就说明你在交互模式里了。我强烈建议新手在这里花五分钟随便敲几个表达式感受一下比如算几个数、拼几个字符串。这个阶段的目的不是学知识而是建立“我打的每一行代码机器都会立刻回应”的感觉。这种感觉很重要它会让你意识到写代码不是一个需要焚香沐浴的仪式而是一个可以随手实验、随时得到反馈的过程。想退出交互模式可以输入exit()也可以直接按CtrlDWindows上是CtrlZ加回车。我在一开始经常忘记退出结果后面命令全敲到Python里去了全是语法错误一度以为电脑坏了。2.2 用文件的方式写正经程序交互模式适合做小实验但真正的程序肯定不能每次都一行行往里敲。更常规的方式是用一个文本文件写好所有代码保存为.py文件然后用python 文件名.py整批执行。我先写了一个最简单的问候程序体会一下从创建文件到运行的完整链路print(hello, python) print(今天开始我正式开始写 Python 程序了)保存为first_program.py然后在终端里执行$ python first_program.py hello, python 今天开始我正式开始写 Python 程序了这里有一个很基本的认知必须建立python后面跟的是文件名不是代码。很多新手在这里手误一两次以为是自己代码写错了其实只是命令格式没对。代码是写在文件里的解释器负责把文件里的内容逐行读出来并执行。顺便说一句在VSCode里写.py文件不用切到终端敲命令直接右键选择“Run Python File in Terminal”或者点右上角的三角形运行按钮代码就自动在下面的终端里执行了。工具的意义就在这里它把上面那套手动操作收拢成一个按钮但底层原理你必须清楚。2.3 一个绕不开的规则缩进是语法的一部分如果是第一次写Python你很快就会撞到一个和其他语言完全不一样的规则——缩进。在C语言、Java里缩进只是为了好看编译器并不在乎但在Python里缩进直接决定了代码结构。同一个代码块必须使用同级别的缩进最常见的是4个空格。如果缩进不一致程序直接报错连运行的机会都没有。我第一次写if语句时就没太在意缩进结果跑出一个IndentationError: unexpected indent。当时第一反应是“我明明写对了”仔细一看是上一行末尾多了一个空格Python立刻不认了。这个规则看似苛刻实际也有它的好处强制你代码整齐阅读时不会出现那种嵌套了七八层的烂账。现在习惯之后反倒觉得比大括号舒服——毕竟少打一对符号。3. 变量和数据类型程序里最基础的一组概念3.1 变量就是给数据贴个名字开始写程序后最常打交道的概念就是变量。变量这东西你可以把它理解成一个贴了标签的盒子。你往盒子里放一样东西再给它起个名字后面想用这样东西的时候不需要把东西掏出来直接喊名字就行。name 张三 age 26 height 1.78这就是赋值语句等号右边的值被存进内存等号左边的变量名成了它的标签。Python和很多其他语言不同的一点是变量本身没有类型类型是数据自带的。同一个变量可以先是整数再赋一个字符串x 10 print(x) x 现在是字符串了 print(x)这个机制叫动态类型它让Python写起来非常快但也埋了一个隐患变量名在程序里到处被复用时间一长容易忘记它现在到底装的是什么类型的数据。我吃过一次亏写了一段逻辑中间把同一个变量名从整数覆盖成了字符串后面做数学运算时直接TypeError排查了很久才发现是变量复用的问题。所以变量名一定要起得有语义不要用那种模糊的x、y更不要用同一个名字装两种不同用途的数据。3.2 Python内置的基础数据类型刚入门不需要把所有类型都记全但下面这几个必须烂熟于心类型名称示例说明int整数42整数类型没有大小上限Python会自动扩容float浮点数3.14小数但注意浮点不是精确的后面细说str字符串hello文本类型必须用引号包裹bool布尔值True/False逻辑判断注意大写T和FNoneType空值None表示“什么都没有”不是0也不是False拿type()函数可以查看一个值的数据类型这个函数写代码时会经常用来做调试print(type(42)) # class int print(type(hello)) # class str print(type(True)) # class bool print(type(None)) # class NoneType字符串是新手接触最多、也最容易迷糊的类型。Python里字符串可以用单引号、双引号甚至三引号包裹a 单引号字符串 b 双引号字符串 c 多行 字符串单引号和双引号在功能上没有任何区别唯一的讲究是当字符串里本身含有引号时可以交替使用避免写一堆反斜杠转义。比如要表示Im a student用双引号包它会更省事s Im a student还有一个非常实用的操作是字符串拼接用加号直接连接两个字符串first_name 张 last_name 三 full_name first_name last_name print(full_name) # 张三不过这还只是起步等学到f-string格式化字符串之后拼接字符串的方式会优雅得多这里先知道加号能拼字符串就行。3.3 布尔值和空值布尔值True和False逻辑判断里到处都是。这里有个很多人忽视的坑True其实是整数1False其实是整数0。在Python里它们可以直接参与数学运算print(True 1) # 2 print(False * 5) # 0虽然这个特性不常用但知道了之后你就理解了为什么1 True会返回True——因为它们在值上确实相等。None表示“什么都没有”最典型的场景是函数没有写返回值时默认返回None。我用这个特性排查过不少代码逻辑问题——有时候函数结果不对不是算法错了而是某个分支忘了写return函数悄悄返回了None后面再做任何操作都会出错。所以判断一个值是不是“存在”正解是is None不是 None。is和的区别后面会花点篇幅专门说。4. 运算符和类型转换让程序开始做判断和计算4.1 算术运算符有一个细节必须记住Python的算术运算符基本都能猜个大概、-、*、/分别对应加减乘除此外还有三个容易出现理解偏差的//整数除法地板除结果向下取整%取余数**幂运算打个比方7 // 2得到37 % 2得到1。这对组合非常实用比如判断一个数是不是偶数就看num % 2 0做分页功能时页数就是总条数 // 每页条数。我第一次遇到5 / 2居然是2.5、5 // 2却是2的时候还愣了半天这个细节说穿了很简单但很多人刚接触时不理解“为什么感觉少的那个反而叫整数除法”。计算优先级也需要注意Python的规则和数学课堂上学的完全一致先乘除后加减括号最优先。唯一特别的是**它的优先级比-更高所以-2 ** 2的结果是-4而不是4因为系统和许多人直觉正好相反。如果想表达“负二的平方”必须写成(-2) ** 2。这种边角细节考试里不会考但写代码时确实能坑到你。4.2 比较运算与“”和“is”的区别比较运算符有、、、、、!结果都是布尔值。其中和is的区别很多写了两三年Python的人也未必说得清楚。简单粗暴的理解是比较的是两个变量的“值”是否相等is比较的是两个变量指向的内存地址即是不是同一个对象是否相等比如a [1, 2, 3] b [1, 2, 3] print(a b) # True因为值相同 print(a is b) # False因为这是两个不同的列表对象但为什么有时候is会返回True呢因为Python对小整数有一个缓存机制-5到256之间的整数会被重复使用所以x 100 y 100 print(x is y) # True因为Python缓存了小整数100是同一个对象这就很容易让新手产生“is就是等于”的错觉。我的建议是比较数值用判断是否是None用is None不要混淆两者。很多老手看到代码里出现if x is None:会觉得正常规范正解但出现if x None:就会皱眉原因就在这里。4.3 类型转换与浮点数的坑既然前面说变量是动态类型的那不同类型之间能不能互相转换答案是主动转换可以但必须显式调用转换函数不能像JavaScript那样自动隐式转换。常用转换函数就三个int()转成整数float()转成浮点数str()转成字符串比如接收用户输入时input()函数返回的一定是字符串想拿来做数学计算就得先转age_text input(请输入你的年龄: ) # 输入 26 age int(age_text) print(age 1) # 27这里有个坑要专门讲int()转换字符串时字符串必须是“长得像整数”的比如int(26)没问题但int(3.14)会报错哪怕3.14看起来是数字。想转小数要先float(3.14)。反过来int(3.14)倒是合法的结果是3直接把小数部分砍掉而不是四舍五入。浮点数本身也有一个老生常谈的坑二进制无法精确表示十进制小数。直接看print(0.1 0.2) # 输出不是0.3而是0.30000000000000004这个不算bug而是浮点数在二进制位数约束下的必然结果。我遇到第一次时差点怀疑人生后来查了资料才明白。解决方案也简单对精度要求高的场景用round()做舍入或者引入decimal.Decimal模块。写普通脚本时绝大多数情况下只需要知道“浮点数不能拿直接比较”就够了print(0.1 0.2 0.3) # False判断浮点数相等一般用“两者之差小于一个极小值”的方式比如abs(a - b) 1e-9这个技巧在数值计算和算法题里非常常用。4.4 一个练习写一个“猜数字大小”的小程序学完运算符和类型转换我自己写了一个特别小的程序来巩固。代码不到十行但把输入、类型转换、比较运算、if判断全串起来了num 42 guess int(input(猜一个整数)) if guess num: print(大了) elif guess num: print(小了) else: print(猜对了)这个程序不长但它逼着我搞清楚了三件事一是input()拿到的确实是字符串所以必须用int()包一层二是if、elif、else后面要加冒号三是python的缩进规则不是摆设。写完运行之后再去看后面的流程控制就不那么恐惧了。5. 读懂报错信息是入门阶段最重要的生存技能5.1 Traceback到底在告诉我们什么程序报错时Python会吐出一大段英文很多新手看到满屏红色就直接心慌。但这段信息其实非常结构化读懂了排查问题就成功了一半。拿一个经典错误示例来看Traceback (most recent call last): File test.py, line 5, in module print(age 1) ~~~^~~ TypeError: unsupported operand type(s) for : NoneType and int报错信息最有用的是后面两行错误类型TypeError以及错误描述不能拿NoneType和int做加法。这等于直接告诉了你问题所在某个变量值变成了None你还在拿它做加法。再看上一行File test.py, line 5直接定位到第5行。这行代码就在眼前问题大概率就出自这一行。所以记住一个原则报错信息是Python给出的最高效的线索永远不要跳过它去瞎猜。没有任何一个程序员不报错区别只在于有人会看报错有人只会把代码翻来覆去地看。5.2 入手阶段最高频的四类报错我把自己入门过程中踩过的报错做了个归类频率最高的就这四类全认识一遍基本能应付日常百分之八十的情况报错类型含义常见场景SyntaxError语法错误代码不符合Python规则引号没闭合、少写冒号、缩进错误NameError名字未定义变量拼写错了或者没定义就使用TypeError类型不匹配操作不支持字符串加数字、int转字符串等ValueError值不符合要求类型对但内容不对int(abc)字符串长得不像数字SyntaxError最典型也最伤人它意味着Python根本没能读懂你的代码。常见诱因包括中文标点混进代码里、单双引号不配对、if后面忘了冒号、Tab和空格混用了。第一个尤其坑我把全角冒号“”写进代码里愣是看了半天才反应过来。由于中英文标点长得太像眼睛根本扫不出来。我的经验是代码报SyntaxError时优先检查行尾标点和括号是不是全角的。NameError和TypeError的区分很简单前者是“这个名字不存在”比如pirnt(hello)把print拼错了后者是“操作对类型不适用”比如你好 1。至于ValueError属于“类型没错但数值范围不对”最经典的例子就是int(3.14)。区分TypeError和ValueError有一个小技巧TypeError一般是“不支持的运算”ValueError一般是“值无法转换成目标格式”。5.3 我的排错实操套路报错信息看懂之后排错效率就取决于有没有一套固定的排查顺序了。我自己总结了一个固定流程已经陪我从入门走到了现在先看报错类型和描述猜个大概方向不要立刻去修改代码。再看定位到的行号去文件里找到那一行仔细检查这一行的变量名、类型、函数调用。如果这一行看不出问题就往前移一行因为报错常常是上一行“制造”了问题这一行才“爆发”。比如变量是在上一行被赋值成None的。在可疑位置临时打印变量值确认执行到这一行时变量到底是什么。这招比盯着代码干瞪眼高效得多。最后一步是我最推荐的。新手很喜欢“盯着代码死看”希望用眼力找出bug但看久了很容易视觉疲劳越看越迷糊。不如直接在出错行前加一句print(某个变量的值)把程序在执行过程中的真实状态打出来一看便知。比如我猜age那里的值不对就加一行age int(input(请输入你的年龄)) print(age) # 临时调试用看输出就能马上确认输入和转换之后age到底是什么类型、什么值。确认完再删掉这行代码就是干净的了。这种“打印驱动”的调试方式虽然原始但绝不丢人。很多从业者日常排查问题也依然在用只是工具更花哨而已。6. 写在笔记最后的一点体会这一篇的内容从工具选择到基本数据类型从运算符到读报错信息每一个单独拿出来都不难难的是把它们串联成一套自然的思维方式写代码之前先想清楚数据是什么类型、操作会得到什么结果、报错之后按什么顺序去排查。我自己的最大感受是Python入门阶段真正重要的不是记住所有API而是把“报错不可怕、按照线索一步步排查”这个心态建立起来。卡住的时候不需要背什么新东西回到变量、类型、运算符这几个基础概念里大多数问题都有答案。下一篇应该会继续往下走进入流程控制。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价