Python实战小项目分享

        Python实战小项目包括网络爬虫、数据分析和可视化、文本处理、图像处理、聊天机器人、任务管理工具、游戏开发和网络服务器等。这些项目提供了实际应用场景和问题解决思路,可以选择感兴趣的项目进行实践,加深对Python编程的理解和掌握。在实践过程中,可以结合相关文档和教程深入学习相应知识点。

全部资源链接:链接:https://pan.baidu.com/s/1cjX9XuePqACt53zpesSPiQ?pwd=5m9l 
提取码:5m9l 

一、资源分享

(一)python教材及基础知识讲解

链接:https://pan.baidu.com/s/1H0UaND9Ai-YRfbbmrvSASw 
提取码:rms9

(二)python安装

链接:https://pan.baidu.com/s/14tPYsFsleDqDMLqbN6azZA 
提取码:yl93

(三)100道Python练手题目

链接:https://pan.baidu.com/s/1AJ0uvFsa0SQ0ZZJ-xryo7Q 
提取码:k734

(四)python实战项目

链接:https://pan.baidu.com/s/1qazUy0zytcpTPKy4o1-1tQ 
提取码:stjc

二、代码调试思路

        程序能一次写完并正常运行的概率很小,基本不超过1%,总会有各种各样的bug需要修正。写程序花费的时间往往要小于调试的时间,这个是基本规律。bug很复杂时,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。下面我们来看下常用的Python调试方法

(一)总体调试方法概览

调试Python程序时,以下是一些常用的思路和方法:

  1. 打印输出:在代码中插入print语句,输出变量的值或者特定的消息,以便跟踪程序执行过程中的问题。

  2. 断点调试:使用调试器(如pdb、PyCharm等)在代码中设置断点,以便在特定位置停止程序的执行,并逐行检查代码。

  3. 异常捕获:使用try-except语句捕获异常,将发生异常的代码块包裹起来,并在except块中打印异常信息,帮助定位问题。

  4. 日志记录:使用Python内置的logging模块或第三方库(如loguru、logbook等)进行日志记录,以便在程序运行时获取详细的调试信息。

  5. 单元测试:编写单元测试代码对程序进行逐个模块的测试,确保每个部分都能正常工作。当出现问题时,可以通过单元测试发现具体的错误。

  6. 缩小范围:如果程序很大或者复杂,可以缩小问题范围,逐渐排查可能导致错误的部分,从而快速确定问题所在。

  7. 查阅文档和资料:利用搜索引擎、官方文档、论坛和社区等资源寻找与问题相似的情况和解决方案,避免重复解决已有的问题。

  8. 代码审查:请其他开发者或同事对你的代码进行审查,他们可能能够发现你忽略的问题或提供新的思路。

  9. 运行环境:检查程序运行所需的环境、依赖项和版本是否满足要求,确保程序在正确的环境下运行。

以上方法并非全部,具体使用哪些方法取决于问题类型和场景。在调试过程中,耐心和细致是非常重要的,逐步排查问题直到找到根本原因。

(二)断点打印法

        第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看:

def foo(s):n = int(s)print '>>> n = %d' % nreturn 10 / n
def main():foo('0')
main()

        执行后在输出中查找打印的变量值:

$ python err.py
>>> n = 0
Traceback (most recent call last):...
ZeroDivisionError: integer division or modulo by zero

        用print最大的坏处是将来还得删掉它,想想程序里到处都是print,运行结果也会包含很多垃圾信息。所以,我们又有第二种方法。

(三)断言

        凡是用print来辅助查看的地方,都可以用断言(assert)来替代:

def foo(s):n = int(s)assert n != 0, 'n is zero!'return 10 / n
def main():foo('0')

        assert的意思是,表达式n != 0应该是True,否则,后面的代码就会出错。

        如果断言失败,assert语句本身就会抛出AssertionError:

$ python err.py
Traceback (most recent call last):...
AssertionError: n is zero!

        程序中如果到处充斥着assert,和print相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:

$ python -O err.py
Traceback (most recent call last):...
ZeroDivisionError: integer division or modulo by zero

        关闭后,你可以把所有的assert语句当成pass来看。

(四) logging日志

        把print替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件:

import logging
s = '0'
n = int(s)
logging.info('n = %d' % n)
print 10 / n

        logging.info()就可以输出一段文本。运行,发现除了ZeroDivisionError,没有任何信息。别急,在import logging之后添加一行配置再试试:

import logging
logging.basicConfig(level=logging.INFO)

        这就是logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

        logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。

(五)pdb调试

        第4种方式是启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。我们先准备好程序:

s = '0'
n = int(s)
print 10 / n

        运行:

$ python -m pdb err.py
> /Users/PythonTab/Github/sicp/err.py(2)<module>()
-> s = '0'

        以参数-m pdb启动后,pdb定位到下一步要执行的代码-> s = ‘0’。输入命令l来查看代码:

(Pdb) l1   # err.py2 -> s = '0'3   n = int(s)4   print 10 / n
[EOF]

        输入命令n可以单步执行代码:

(Pdb) n
/Users/PythonTab/Github/sicp/err.py(3)<module>()
-> n = int(s)
(Pdb) n
/Users/PythonTab/Github/sicp/err.py(4)<module>()
-> print 10 / n

        任何时候都可以输入命令p 变量名来查看变量:

(Pdb) p s
'0'
(Pdb) p n
0

        输入命令q结束调试,退出程序:

(Pdb) n
ZeroDivisionError: 'integer division or modulo by zero'
> /Users/PythonTab/Github/sicp/err.py(4)<module>()
-> print 10 / n
(Pdb) q

        这种通过pdb在命令行调试的方法理论上是万能的,但实在是太麻烦了,如果有一千行代码,要运行到第999行得敲多少命令啊。还好,我们还有另一种调试方法。

pdb.set_trace()

        这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点:

import pdb
s = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print 10 / n

        运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行:

$ python err.py 
> /Users/PythonTab/Github/sicp/err.py(7)<module>()
-> print 10 / n
(Pdb) p n
0
(Pdb) c
Traceback (most recent call last):File "err.py", line 7, in <module>print 10 / n
ZeroDivisionError: integer division or modulo by zero

这个方式比直接启动pdb单步调试效率要高很多,但也高不到哪去。

(六) IDE调试

        如果要比较爽地设置断点、单步执行,就需要一个支持调试功能的IDE。目前比较好的Python IDE有PyCharm,另外,Eclipse加上pydev插件也可以调试Python程序。

 

三、参考引用

[1]Python常用的程序调试方法-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/169906.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据与视图的完美契合:Vue响应式的交织魅力

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

水电站与数据可视化:洞察未来能源趋势的窗口

在信息时代的浪潮中&#xff0c;数据可视化正成为推动能源领域发展的重要工具。今天&#xff0c;我们将带您一起探索水电站与数据可视化的结合&#xff0c;如何成为洞察未来能源趋势的窗口。水电站作为传统能源领域的重要组成部分&#xff0c;它的运行与管理涉及大量的数据。然…

在行首,行尾添加文本,替换文本中的空格、制表符等

本文使用&#xff1a;notepad进行演示&#xff0c;其他编辑器有类似的功能也可使用。 替换文本中的空格、制表符 当我们在查看环境变量的时候&#xff0c;往往用肉眼去看这种格式的是相当痛苦的。 -DDATABASE_DRIVER_CLASS_NAMExxx -DDATABASE_URLxxx -DDATABASE_USERNAMExxx …

python网络爬虫实例

目录 1、访问百度 2、输入单词百度翻译 3、豆瓣电影排行榜 4、豆瓣电影top250 5、下载美女壁纸 1、访问百度 from urllib.request import urlopen url"http://www.baidu.com" respurlopen(url)with open("mybaidu.html",mode"w") as f:f.wr…

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;我们一般都知道Mysql的存储引擎有两种&#xff0c;MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎 文章目录 Mysql实战-SQL存储引擎1.存储引擎2.MyISAM的特点3. InnoDB的特…

JS中面向对象的程序设计

面向对象&#xff08;Object-Oriented&#xff0c;OO&#xff09;的语言有一个标志&#xff0c;那就是它们都有类的概念&#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念&#xff0c;因此它的对象也与基于类的语言中的对象有所不…

机器学习-模型评估与选择

文章目录 评估方法留出法交叉验证自助法 性能的衡量回归问题分类问题查准率、查全率与F1ROC与AUC 在机器学习中&#xff0c;我们通常面临两个主要问题&#xff1a;欠拟合和过拟合。欠拟合指模型无法在训练数据上获得足够低的误差&#xff0c;通常是因为模型太简单&#xff0c;无…

Java项目_家庭记账(简易版)

文章目录 简介代码实现 简介 该项目主要用来练习&#xff0c;Java的变量&#xff0c;运算符&#xff0c;分支结构和循环结构的知识点。 程序界面如下&#xff1a; 登记收入 登记支出 收支明细 程序退出 代码实现 package project;import java.util.Scanner;import sta…

循环队列c语言版

一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…

Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析

最近DOTS发布了正式的版本, 我们来分享一下DOTS里面Baking核心机制&#xff0c;方便大家上手学习掌握Unity DOTS开发。今天给大家分享的Baking机制中的Filter Baking Output与Prefab In Baking。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础…

Plex踩坑——plex web无法找到媒体服务器

现象&#xff1a;之前安装过plex server&#xff0c;然后卸载了。再次重装后&#xff0c;plex web无法找到媒体服务器。 原因&#xff1a;卸载plex server时需要手动将plex的注册表删除&#xff1a;HKEY_CURRENT_USER\Software\Plex, Inc. 原文链接Uninstall Plex Media Serve…

组件通信$refs | $parent |$root

父组件传值子组件用Props 子组件传值父组件用$emit 父组件直接还可以直接取子组件的值用$refs 父组件直接从子子组件中获取值$refs 不建议使用会增加组件之间的耦合度&#xff0c;一般用于第三方插件的封装 ref如果绑定在dom节点上&#xff0c;拿到的就是原生dom节点。 ref如…

【从0到1设计一个网关】自研网关的架构搭建

文章目录 项目骨架搭建领域模型与DDD核心上下文模型封装静态配置的加载组件生命周期项目骨架搭建 这里我使用的IDE工具是IDEA。 从上文中我们了解到,我们的项目大概有五个模块,Client,Common,Register Center,Config Center,Core这五个模块。 下面开始具体骨架的搭建,…

项目部署Linux步骤

1、最小化安装centos7-环境准备 安装epel-release 安装epel-release&#xff0c;因为有些rpm包在官方库中找不到。前提是保证可以联网 yum install -y epel-release 修改IP net-tools net-tool&#xff1a;工具包集合&#xff0c;包含ifconfig等命令 yum install -y net-…

Hive安装配置笔记

版本说明 hadoop-3.3.6&#xff08;已安装&#xff09; mysql-8&#xff08;已安装&#xff09; hive-3.1.3 将hive解压到对应目录后做如下配置&#xff1a; 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…

“/usr/bin/env: ‘python’: No such file or directory“:Linux中python口令无效,python3有效

文章目录 1. 问题的发现2. /usr/bin 目录里跟python有关的链接2.1 使用ll查看文件的链接2.2 分析python口令不能使用的原因 3 参考文章《linux 升级默认python 环境为python3》4 修改命令为python 1. 问题的发现 我在安装scons时&#xff0c;发现python口令不能直接用&#xf…

springboot实现邮箱发送(激活码)功能

第一步&#xff1a;现在邮箱里面开启smtp服务 这里用163邮箱举例&#xff0c;配置一下授权密码&#xff0c;这个要提前记住 第二步&#xff1a;引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/P…

Windows电脑如何录制电脑桌面?

如果你使用的电脑是Windows系统&#xff0c;那你是不是想知道如何在Windows电脑上录制电脑桌面&#xff1f; 本文以win10为例&#xff0c;好消息是&#xff0c;Windows 10电脑自带录屏工具&#xff0c;你可以直接使用此录屏工具轻松录制视频&#xff0c;而无需下载其他第三方软…

【网络原理】| 应用层协议与传输层协议 (UDP)

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;javaEE初阶 &#x1f397;️ 乾坤未定&#xff0c;你我皆黑马 目录 一、应用层协议二、传输层协议&#xff08;UDP协议&#xff09; 一、应用层协议 应用层是和代码直接相关的一层&#xff0c;决定…

arcgis js api FeatureLayer加载时返回数据带*问题

接着这一问题衍生出来的问题 arcgis的MapServer服务查询出来的结果geometry坐标点带*的问题-CSDN博客 个人感觉像是server版本的问题&#xff0c;具体不清楚&#xff0c;pg数据库里面的shape点集合坐标点的精度是8&#xff0c;但是server服务查出来的默认都十几位。所以存在一…