ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python日常记录:从环境搭建到报错排查的实用避坑指南

Python日常记录:从环境搭建到报错排查的实用避坑指南 在这个行业写了将近十年的代码让我排过的 Python 报错可能比我自己写过的业务代码还多。翻热搜榜的时候我发现Python 安装教程、Python 入门、VSCode 配置 Python 环境、甚至环境变量配置每年都能稳定上榜说明什么问题说明大部分新手卡住的地方从来不是语法本身而是从我想学 Python到我能在编辑器里跑出第一行 hello world这段路坑远比想象中多。所以这篇东西我不想写成系统教程我更愿意把它当成一份Python 日常记录来写记录我在 Windows 上装 Python、配编辑器、切环境、写爬虫、做数据分析、给朋友打包 exe 时踩过的坑以及为什么很多报错看起来千奇百怪根源就那几类。文章不是写给那种已经写了三年代码的人看的而是给刚入门或者学了但老觉得差点意思的朋友一条能顺着走完的路。看完之后你会发现Python 真正难的地方不是语法背得少而是动手前你根本不知道环境、依赖、解释器这些东西能凑在一起给你整出多少幺蛾子。1. 环境搭建观察Python 安装与日常使用中真正的坑1.1 Windows 安装 Python我不太建议无脑 NextWindows 装 Python 很简单官网下 exe双击下一步理论上五分钟搞定。但很多朋友装完之后在命令行输入python --version迎接他们的是不是内部或外部命令。这个场面我已经见过太多次了。问题不在于安装而在于安装时没有勾选那个看起来平平无奇的选项Add Python to PATH。这句话翻译成人话就是让 Windows 在任意目录下都能找到 python 这个命令。如果不勾选Python 确实装好了但它藏在 C 盘某个隐蔽目录里系统的命令行根本不知道它存在自然一输入就报错。我建议你在安装时不仅勾上这个选项还顺手选一下Customize installation把安装目录改到一个你自己记得住、路径里没有空格和中文的地方。比如我常用的是D:\Python311这么做的好处是后面你要是想手动配环境变量、找 site-packages、清理旧版本都会方便很多。至于版本选择我自己会多留一个心眼。刚入门的朋友看到最新版就想装最新版特性确实好但很多第三方库还没适配完反而容易踩雷。日常写脚本、学语法、做爬虫Python 3.10 到 3.12 这个区间的版本基本都属于稳定又能打的范围。别用太老的 3.6/3.7很多现代库已经放弃支持了碰到pip install报错你会发现网上搜到的答案都是让你升级版本。1.2 环境变量python 不是内部或外部命令的真相前面提到 PATH 这个选项没勾后面想补怎么办这就涉及到环境变量配置。Windows 的搜索栏输入编辑系统环境变量打开环境变量在系统变量里找到Path编辑新增两条一条指向 Python 的安装根目录一条指向它的Scripts子目录。Scripts目录很重要因为pip、后面你装的一些命令行工具都住在这里。你只配了 Python 根目录却没配 Scripts接下来会面临第二个经典报错pip 不是内部或外部命令。这也是我见过的一个典型连环坑用户明明装了 Python也勾了 PATH结果 pip 还是不能用的原因就两个要么是 PATH 里没有 Scripts 目录要么是电脑里装了多个版本的 Python系统默认调用了其中一个没有 pip 的旧版本。当你意识到这一点之后建议安装任何工具前先敲三行命令确认当前环境到底是什么python --version where python pip --version第一行告诉你哪个 Python 在运行第二行告诉你它到底在哪第三行告诉你当前对应的 pip 是什么。这三行输出没事多看看环境问题能少一半。很多人不管三七二十一直接pip install装了一堆包结果项目运行还是报 ModuleNotFoundError最后排查半天才发现pip 是给 Python 2.7 用的项目跑在 Python 3.11 上相当于把东西寄错了地址。1.3 一台电脑多个 Python 版本到底怎么共存过去我也觉得一台电脑装一个 Python 就够了直到我手上同时出现过一个只能跑 Python 3.8 的老项目、一个必须用 3.11 的新项目、还有一个依赖 pandas 2.x 的数据分析脚本。这时候你就被迫面对版本共存的问题了。Windows 上共存其实没有想象中可怕。安装多个版本时安装目录选不同的文件夹PATH 里保留一个最常用的版本。需要调用其他版本时有两种比较优雅的办法。第一种是用 Windows 官方自带的py启动器直接在命令行里指定大版本号py -3.8 --version py -3.11 --version py -3.8 -m pip install requestspy -3.8的含义是帮我找到电脑里的 Python 3.8 并运行它搭配-m pip就能给指定版本装包完全绕开了你的 pip 到底是给谁用的这个世纪难题。第二种是用绝对路径或者自己给 exe 建一个软链接比如把D:\Python311\python.exe重命名成python311.exe放进一个已经加了 PATH 的目录。这个操作对命令行高频用户非常友好。不过我也得提醒一句多版本共存虽然能解决问题但它要求你更清楚自己在干什么。如果是刚入门不到三个月的新手我反而建议先把电脑清干净就留一个稳定版本别一上来就学人家搞花活环境越简单排错越轻松。2. 编辑器与运行环境VSCode、PyCharm 与缺失依赖的处理2.1 VSCode 配置 Python 环境照着做一遍就够VSCode 现在是很多人写 Python 的首选免费、轻量、插件丰富。但它的三件套如果没配好用起来就是在劝退用户一是 Python 扩展没装二是解释器没选中三是终端里的命令和环境不一致。第一步先在扩展商店里搜 Python安装微软官方出的那一个看到 Publisher 是 Microsoft 的才对。装好扩展之后按CtrlShiftP输入Python: Select Interpreter在这里选择你要用的解释器。这一步决定了右下角状态栏里显示的是哪个 Python 版本也决定了你按 F5 调试时的运行环境。我见过太多人代码文件写好了结果左下角解释器指向的是全局环境项目建好的虚拟环境压根没生效跑起来自然各种缺包。第二步是让终端进入项目环境。你直接在 VSCode 里 Ctrl 打开终端时它会默认继承你系统的 PATH但如果你刚才在命令面板里选了解释器新开的终端大概率会自动激活对应的虚拟环境。如果你没看到前面括号里显示环境名那就手动激活一下Windows 下运行.\.venv\Scripts\activatemacOS/Linux 下运行source .venv/bin/activate另外两个值得改的小配置藏在.vscode/settings.json里。比如把默认终端改为 cmd 或 PowerShell 都行但最好不要一会儿用 cmd 一会儿用 Git Bash因为路径表示格式不同新手容易在绝对路径的斜杠方向上栽跟头。还有我习惯把这个文件里加一行python.terminal.activateEnvironment: true确保打开终端时尽量自动进入当前项目的虚拟环境。这些配置属于不配也能跑配了跑得更顺的类型慢慢体会就行。2.2 PyCharm 用社区版就够了关键是把解释器选对写小型脚本用 VSCode 很顺手但一旦做稍微复杂点的项目我还是会切到 PyCharm。说实话我日常用的就是社区版免费且功能对于绝大多数场景完全够用。PyCharm 比 VSCode 强的地方在于它默认帮你把项目结构管理起来比如新建一个项目时它会主动问你要不要创建虚拟环境这对新手来说是一种很好的引导。在 PyCharm 里配环境的核心操作是右下角或者 Settings 里的Python Interpreter。点击 Add Interpreter选择 Existing浏览到你虚拟环境里的python.exe。别每天在 PyCharm 里写完代码点绿三角然后才发现它用的是系统某个陈旧解释器导致import requests都报错。很多新手问我为什么 PyCharm 里能跑VSCode 里却不行答案多半是两边解释器根本不是同一个。这就是我常强调的IDE 只是外壳解释器才决定代码真正跑在哪个环境里。两个编辑器怎么选我的建议非常简单刚入门、只想跟着教程试代码用 VSCode因为你不用关心太多工程概念如果你想认认真真做一个好几百行甚至上千行的项目直接上 PyCharm 社区版它的调试器、代码补全和版本管理集成会让你省不少心。不必要为这种选择纠结一整天工具是给人用的不是用来供奉的。2.3 缺失包与节点pip 安装失败的常见处理几乎每个 Python 用户的日常都绕不开一条命令pip install 一个包。我自己也被ModuleNotFoundError逼疯过不知道多少次。按报错信息去装包是本能反应但安装失败才是考验的开始。最常见的失败场景是网络超时。解决办法有两个方向一是给 pip 更换国内镜像源比如清华源、阿里源安装速度能快几十倍另一个是给 pip 设置超时时间加--default-timeout100。老实说如果你的网络环境一般只装一个 numpy 都转圈半天那大概率不是包本身的问题而是你还在用默认的海外源。pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple不过我在这里更想聊聊另一个更容易被忽略的情况包能装上但它跟你当前的 Python 版本或者依赖库不兼容。比如你强行在 Python 3.13 上装某个老牌科学计算库直接编译报错的情况一点都不稀奇。遇到这种问题不要闷头编译重试先想想是不是应该换一个版本更稳定的 Python或者找一个别人已经编译好的 wheel 文件。还有一种非常典型的场景某个开源工具或工作流提示你缺了依赖让你运行pip install -u --pre comfyui-m之类的命令。我看到过有人把命令原样粘进去跑结果报错更莫名其妙。原因很简单带--pre的安装命令默认装的是预发布版本这类包往往不稳定依赖关系也不成熟。正确做法是先看项目文档里的 requirements 文件或官方安装说明搞清楚它需要的 Python 版本和依赖范围再决定装哪个版本。看见提示就乱装是比不装更危险的操作。3. 日常编码进阶类型转换、装饰器、多进程的实战意义3.1 类型转换报错最多的地方往往不是复杂语法Python 基础语法这个话题永远有人搜但只要你写过几段代码就会发现真正让你头疼的经常不是类、继承、装饰器这类高级概念而是低到尘埃里的类型转换。举个例子input()函数返回值永远是字符串哪怕你在控制台输入的是100它也是100。如果你直接拿来跟数字比较num input(输入一个数字) if num 10: print(大于10)Python 在看到的两边不是一个类型时直接报TypeError: not supported between instances of str and int中文意思是字符串和整数之间不能比较。解决方式就是先转换类型num int(input(输入一个数字))这里得补一句如果用户随手输入一个abcint(abc)会抛ValueError。所以日常记录里我的经验是对外部输入做转换前先判断内容是否真的能转换或者直接用try...except包一层。类型转换的坑在数据处理中更隐蔽。用 pandas 读 CSV 时如果一列数据里大部分是数字偶有几个2000/1/1这样的文本pandas 会自动把整列推断成字符串后面做加减就报错。这种隐式类型不稳定几乎每个做数据分析的人都见过排解方法是用pd.to_numeric(column, errorscoerce)把无法转换的内容变成 NaN再统一处理。说这些想表达的是别觉得类型转换知识点太简单就不看它恰恰是你日常代码里翻车概率最高的一环。3.2 装饰器从日志和计时两个需求切入最好理解装饰器经常被说成进阶内容实际上它一点都不玄乎。你可以把它理解成函数上的一个标记Python 在调用你的函数之前先把这个函数当成参数传递出去让外层代码帮你额外做点事情。想理解它的价值最好的例子是给函数计时。你写完一堆函数现在想看看每个函数跑了多久最 naive 的办法是在每个函数里面手动写开始时间和结束时间然后算差值。问题是如果函数有二三十个你就得复制粘贴二三十遍既啰嗦又容易漏。装饰器就是来解决函数通用能力抽取的问题import time def timer(func): def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) print(f{func.__name__} 耗时 {time.time() - start:.4f} 秒) return result return wrapper timer def slow_add(a, b): time.sleep(1) return a b print(slow_add(1, 2))代码里的timer就是语法糖它等价于执行slow_add timer(slow_add)。slow_add原本只是一个普通的加法函数被timer装饰之后每次调用都会先进入wrapper里面记录时间、执行原函数、打印时长、返回结果。这样计时逻辑只写一遍所有函数想计时就加一行timer想去掉就删一行不用改动任何业务代码。我建议把装饰器的学习起点放在日志和计时这两个非常简单的场景上别一上来就去啃那些需要三层嵌套、带参数的高阶用法。你先把timer看懂了后面遇到带参数的装饰器、类装饰器都是基于同样的思想扩展出来的。3.3 多进程与多线程CPU 密集任务先想清楚这一点Python 写爬虫、批量下载文件、处理大量数据时性能瓶颈经常是单线程速度太慢。于是很多人想用多线程提升效率但用完之后发现 CPU 占用还是只有一核速度半点没涨原因在于 Python 有个叫 GIL全局解释器锁的机制。这名字听着像政治术语其实它像一个老大爷拿着钥匙站在 Python 解释器门口规定同一时刻只能有一个线程在执行 Python 字节码。所以如果任务是 CPU 计算密集型的你用多线程不但不加速反而会因为线程调度开销变得更慢。CPU 密集型的任务应该用多进程。每个进程都有独立的解释器和内存空间相当于你同时开好几个 Python 程序一起干活自然能利用多核 CPU。一个用concurrent.futures写出来的模板我一直很喜欢from concurrent.futures import ProcessPoolExecutor def square(x): return x * x if __name__ __main__: numbers range(10) with ProcessPoolExecutor(max_workers4) as pool: results pool.map(square, numbers, chunksize4) print(list(results))注意if __name__ __main__:这一行在 Windows 平台下绝对不能省。Windows 上创建多进程时会重新导入当前脚本文件没有这个守卫语句你会在运行的一瞬间看到一大堆递归报错这是新手最常踩的多进程坑。反过来如果你的任务是 IO 密集型的比如爬虫里大部分时间都在等网络响应、等数据库返回多线程就很有用。ThreadPoolExecutor可以把几十个请求同时发出去总耗时从几十秒压缩到几秒。我自己的判断口诀只有一句话在等别人时用线程在自己算时用进程。先分清任务属于哪种类型再选方案比到处复制高并发代码靠谱得多。3.4 兴趣小项目从编辑器里能跑到我有作品很多人学到函数和类之后会陷入一种空虚语法感觉都会但不知道能做什么。搜索引擎里挂着李白打酒 python、Python 小游戏、Python 爱心代码这类热词其实也是一种信号——大家需要那种短促、有趣、能立刻获得反馈的小项目来维持兴趣。李白打酒是个经典的逆推题李白提着酒壶出门遇到酒店酒量翻倍遇到花就喝掉一斗经过三次店和三次花之后刚好喝光。题目问壶里原来有多少酒。用正向穷举或逆向推倒都行倒推代码其实短到难以置信alcohol 0 for _ in range(3): alcohol 1 alcohol / 2 print(alcohol) # 0.875这道题不用任何第三方库却能帮你把循环、状态更新、逆推逻辑全部练一遍。我觉得用 Python 解决一道数学趣题的价值不在于算法有多厉害而在于你会发现代码是思考的延伸。至于爱心代码、小游戏、星露谷物语相关的编程网站说白了都是用兴趣驱动学习。我自己见过不少朋友正经教程看了两章就放弃了结果为了给自己的游戏写一个辅助工具愣是把 Python 基础啃了下来。所以我的态度是不排斥任何看着有点离谱的项目愿望只要能让你坐在电脑前把代码敲起来它就是好起点。反而只收藏不写、只看书不动手才是学编程最大的敌人。4. 把 Python 落到真实场景爬虫、数据分析、量化与打包4.1 爬虫入门会爬的标准其实是能处理异常爬虫可能是 Python 被提起最多的应用方向了很多人的第一个完整项目就是爬虫。不过我不太建议一上来就盯着某个大平台使劲爬那样既容易触发对方的风控也不太体面。先从一个允许访问的公开页面开始把一个完整的链路跑通import requests from bs4 import BeautifulSoup url https://example.com resp requests.get(url, headers{User-Agent: Mozilla/5.0}) resp.raise_for_status() # 状态码不是 200 就直接抛异常 soup BeautifulSoup(resp.text, html.parser) for item in soup.select(.article-title): print(item.get_text(stripTrue))这段代码看起来简单但它背后的三层东西才是爬虫的真正门槛第一层是页面解析你要学会看 HTML 结构、CSS 选择器第二层是异常处理网络请求会超时、页面结构会变、服务器可能返回 403你怎么优雅地让程序跳过失败继续工作第三层是合规边界robots 协议、平台条款、数据使用范围这些都不是无关痛痒的口号而是所有工程化爬虫必须考虑的约束。举个例子热搜里有python 在线播放 b 站音频流这个需求技术上可以做到但分发出去并不合适。如果你真的希望从内容平台保存音频先去看它有没有官方接口、是否允许缓存再考虑要不要自己写解析和下载。任何绕过平台限制的行为哪怕只是技术演示都可能给你带来麻烦。技术圈子一直提倡Exercise caution不是没道理的因为做技术的底线不是能不能做到而是该不该这么做。4.2 数据分析可视化让 matplotlib 帮你做日常统计数据分析在热搜里一直是个热门方向但实际上不是每个人都要学到机器学习那一步。日常生活中的 Excel 处理不过来、想画一张趋势图、想整理几个月账目这些用 pandas 加 matplotlib 就能完成学习成本比想象中低得多。我给自己做过一个手机使用时间统计的小脚本数据来源很简单手机自带的屏幕使用时间导出的 CSV。Python 代码只做了三件事读取、按日期分组、画图import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(screen_time.csv, parse_dates[date]) daily df.groupby(date)[minutes].sum() fig, ax plt.subplots(figsize(10, 5)) daily.plot(kindbar, axax) ax.set_title(Daily Screen Time) plt.tight_layout() plt.savefig(screen_time_chart.png)这种项目给人的成就感非常直接数据跑完一张图出现在你面前过去一个月的习惯一目了然。比照着教程敲一遍牛客题集的成就感强太多。更重要的是你可能在这个过程中遇到各种各样脏数据问题比如日期格式不统一、某天记录缺失、分钟数和小时数混在一起。这些处理过程才是以后做任何数据项目真正要用到的核心能力——不是模型调参而是清洗数据和理解数据。4.3 量化交易策略模拟盘是底线回测前先想明白你在干嘛量化交易策略代码能上热搜我是既开心又担心。开心的是大家开始意识到 Python 可以做一些复杂的金融数据处理担心的是不少人把它当作躺着赚钱的工具。我先说结论用 Python 做数据分析、做策略回测没有问题但千万不要觉得写了个策略就能真金白银上去跑金融市场的复杂程度远不是一个双均线策略能覆盖的。如果你只是单纯想学思路一个最简单的双均线策略回测可以这样搭用yfinance或者本地 CSV 获取历史行情数据。计算 5 日均线和 20 日均线。当 5 日均线上穿 20 日均线时模拟买入。当 5 日均线下穿 20 日均线时模拟卖出。按最后结果计算收益和最大回撤。这个流程里的技术知识点很多时间序列处理、信号生成、模拟撮合、绩效统计每一项都是很好的 Python 练习。我自己写过几版回测代码之后最深的感觉是策略逻辑很简单难的是把数据对齐、把手续费滑点考虑进去、把代码写得不会在未来某一天突然算出离谱结果。等到这些底层能力都过关了你自然会明白直接拿策略去市场上跑是多么冒险的行为。4.4 Python 转 exe让没有 Python 的朋友也能运行你的程序很多人的第一个 Python 作品是想送给亲戚朋友用的比如一个批量重命名工具、一个小游戏、一个数据录入面板。问题在于对方电脑上没有 Python 环境你总不能让人家先去装解释器再跑你的脚本。这时候就需要把脚本打包成 exe。最常用的工具是 PyInstaller安装一条命令打包也就一条命令pip install pyinstaller pyinstaller -F -w --clean app.py-F的意思是打包成单文件方便发给别人-w的意思是运行时不弹出黑色控制台窗口适合带界面的程序--clean是清理缓存免得旧打包结果污染新产物。打包完成之后去dist目录下拿app.exe就行。但 PyInstaller 有非常多的坑。第一是路径问题打包时如果你的程序用相对路径读取配置文件exe 运行之后当前目录往往不是你双击的那个目录导致找不到文件。解决方法是运行时用sys._MEIPASS或者直接基于 exe 所在目录拼路径。第二是体积问题哪怕只有一个print的程序用默认方式打包出来至少几十 MB因为 PyInstaller 会把整个 Python 解释器塞进去。第三是杀毒软件误报这个真不是我瞎说exe 一发出去经常被 Windows Defender 拦一下原因你也别细究解释器动态加载的机制在某些杀毒引擎眼里天然可疑。我的经验是给朋友打包前先在本机跑一遍 exe 确认能运行发出去的时候主动说明来源别让人家以为你给他传了个病毒。5. 日常记录中的常见报错与排查思路5.1 排错基本法先读报错再谈搜索现在搜索和问答社区的资料非常多但随之而来的问题是报错复制到搜索框变成了一种肌肉记忆。你想搜索一个错误没关系关键是你得带着上下文信息去搜。这是我日常记录里最想强调的一件事代码报错时永远先读最后几行尤其是Error类型和后面的说明然后往前翻翻你的代码定位文件路径和行号最后才是把报错原样丢进搜索引擎。我整理了一份平时重复出现频率最高的报错速查表几乎每个星期都会用到报错信息常见原因处理思路ModuleNotFoundError: No module named xxx当前环境没装这个库先确认解释器环境再pip install xxxSyntaxError: invalid syntax语法错误比如漏冒号、括号没闭合看报错行号和上一行多半是表达式不完整IndentationError: unexpected indent该缩进的地方没缩进或不该缩进的地方多了空格统一用 4 空格别 Tab 和空格混用TypeError: int object is not callable变量名把内置函数覆盖了比如sum 10后再sum([1,2])搜索全局有没有和内置函数重名的变量FileNotFoundError: [Errno 2]文件路径不对或文件不存在用os.path.abspath()打印完整路径看看ValueError: invalid literal for int()字符串无法转换成数字转换前先isdigit()或者用try...except搜索问题的正确姿势应该带上你的 Python 版本、操作系统、完整报错信息和最少可复现场景。你直接问python 报错怎么办别人想帮你也无从下手。而一个格式良好的问题比如Python 3.11.2 在 Windows 11 上使用 requests 请求 https 时报 SSLError以下是完整堆栈大概率十分钟内就会有人给出有效建议。5.2 一个缺失节点小插曲带来的连锁反思写这篇记录的时候我正好在处理一个用 ComfyUI 管理自定义工作流时碰到的依赖问题。当时界面直接提示要安装缺失的节点请在你的 python 环境中运行pip install -u --pre comfyui-m。按照一般逻辑界面让装什么我就装什么于是我把命令复制进终端顺利安装完成然后重启应用。结果发现问题根本没有消失反而冒出了一个新的版本不兼容报错。回头看这次翻车的根源是我太信任启动器给出的提示而没有先了解这个项目到底需要什么。带--pre参数安装通常意味着装的是预发布版这类包可能依赖了另一个还没正式发布的库装完就是一个隐藏炸弹。后来我做了什么我先去这个项目的官方文档里找到了 requirements 文件确认它对 Python 版本和核心库的依赖范围再手动把版本锁定到稳定版本结合日志一条一条排查折腾了将近一小时才算理顺。这件事给我最大的提醒是安装命令是别人写给你的不代表它适合你的环境。看到请安装缺失的包这类提示第一步是复制完整提示保存下来第二步是去项目仓库或文档确认版本约束第三步才是执行安装。而且装完之后不要着急重启用起来先在命令行里用pip show 包名看一下版本号和安装路径跟你当前的环境对不对得上。5.3 从记录到习惯几个让日常省心的维护建议被环境问题毒打多年之后我逐渐养成了一些小习惯写下来供你参考。第一给每个项目建虚拟环境。我见过太多人全局环境里装了几百个包每个项目都用同一个解释器今天装这个库把另一个库的版本顶掉明天跑项目时莫名其妙缺依赖。用python -m venv .venv创建一个项目专属环境多花十秒钟能避免后面数小时的排错。第二项目根目录放一份requirements.txt或pyproject.toml。当我们换电脑或者分享项目给朋友时直接导出一份完整可用列表比口头说你就装一下 requests、pandas、matplotlib靠谱太多。导出方法很简单在当前环境执行pip freeze requirements.txt第三重要变更前用 git 做一次提交哪怕仓库就建在本地。这个习惯给我挽回的损失远比想象中多一行git checkout .就能让误删改的代码回到可用状态。第四给自己建一个报错记录本不管是 Typora 还是 Notion 还是 VSCode 里的 Markdown 文件都行把遇到过的报错、解决过程和截图整理进去。技术提问时最蠢的事情是重复踩同一个坑你记录下来就不算白踩。最后再分享一个我坚持很久的小习惯写到这里其实已经没有大纲了就随口聊聊。我手机上有一个叫日常记录.py的脚本它的功能是不停地往一个 JSON 文件里追加我当天遇到的 Python 报错和解决方法。为什么用 JSON 而不是脑子记因为人的记忆真的太不可靠了三个月前帮你省了一天的那个报错三个月后原封不动再出现一次你照样可能搜半个小时的答案。等到这个 JSON 积累到一两百条的时候你回头看会发现绝大多数问题都是几个老朋友的变体环境不对、路径不对、版本不对、类型不对。Python 作为一门胶水语言它的灵活和生态丰富是优点但灵活也意味着选择多、组合多坑自然就多。遇到问题别先怀疑自己没天赋多数时候只是环境没整明白。你把这些记录看懂了至少能少走一半弯路你继续写下去身边的朋友大概会开始把你当成会搞 Python 的那个人那时候你就真的是了。
返回列表