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.mzph.cn/news/115352.shtml

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

相关文章

2023-mac brew安装python最新版本,遇见的问题和处理方式

#### 创建Python3.11.6符号链接我现在遇见这个问题了&#xff1a;python --version -bash: python: command not found 192:bin wangyang$ python3 --version Python 3.9.6 192:bin wangyang$ /usr/local/bin/python3 --version Python 3.11.6我要怎么做&#xff0c;我才可以直…

Qt耗时操作添加动画等待加载效果

Qt耗时操作添加动画等待加载效果_qt 等待动画-CSDN博客本例模拟耗时请求实现动画等待加载效果&#xff0c;采用QtConcurrent::run实现异步耗时操作&#xff0c;通过QFutureWatcher异步监测耗时操作结果的返回值做相应的动画演示。_qt 等待动画https://blog.csdn.net/qq_3666686…

高效访问数据的关键:解析MySQL主键自增长的运作机制!

文章目录 &#x1f34a; 主键自增长的概念&#x1f34a; 主键自增长的数据类型&#x1f34a; 主键自增长的步长&#x1f34a; 主键自增长的性能优化&#x1f389; 为什么需要主键自增长的性能优化?&#x1f389; 主键自增长的性能优化方案&#x1f4dd; 1. 调整主键自增长的步…

istio介绍(一)

1. 概念 1.1 虚拟服务 虚拟服务提供流量路由功能&#xff0c;它基于 Istio 和平台提供的基本的连通性和服务发现能力&#xff0c;让您配置如何在服务网格内将请求路由到服务 示例&#xff1a; apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:nam…

信钰证券:长江电力180亿市值,招商证券、摩根大通等浮盈超一成

本周A股限售股解禁规划环比有所上升。 Wind数据核算闪现&#xff0c;除去新上市公司&#xff0c;本周共有64家公司限售股解禁&#xff0c;解禁数量51.52亿股&#xff0c;以最新收盘价核算&#xff08;下同&#xff09;&#xff0c;解禁市值776.21亿元。 本周解禁市值跨越10亿…

RN:报错info Opening flipper://null/React?device=React%20Native

背景 在 ios 上使用 debug 模式的时候&#xff0c;报错&#xff1a;info Opening flipper://null/React?deviceReact%20Native&#xff0c;我找到了这个 issue 其实也可以看到现在打开 debug&#xff0c;是 open debug&#xff0c;也不是之前的 debug for chrome 了&#xf…

每日一题 2316. 统计无向图中无法互相到达点对数(中等,图连通分量)

题目很简单&#xff0c;只要求出每个连通分量有多少个节点即可首先通过建立一个字典来表示每个节点的邻接关系遍历每个节点&#xff0c;并通过邻接关系标记在当前连通分量内的所有的点&#xff0c;这样就可以知道一个连通分量内有多少个点在这里我陷入了一个误区&#xff0c;导…

计算机系统概论

1. 现代计算机由哪两部分组成 计算机系统&#xff1a;硬件、软件

分享一下抽奖活动小程序怎么做

在当今数字化时代&#xff0c;抽奖活动小程序已成为一种高效、创新的营销方式。它不仅能够吸引用户的注意力&#xff0c;提高品牌知名度&#xff0c;还能促进用户参与度&#xff0c;增强用户对品牌的忠诚度。本文将详细介绍如何制作一个成功的抽奖活动小程序&#xff0c;以及它…

Python爬虫如何设置代理服务器(搭建代理服务器教程)

在Python爬虫中使用代理服务器可以提高爬取数据的效率和稳定性。本文将为您提供搭建代理服务器的详细教程&#xff0c;并提供示例代码&#xff0c;帮助您在Python爬虫中设置代理服务器&#xff0c;实现更高效、稳定的数据抓取。 Python爬虫怎么设置代理服务器&#xff08;搭建代…

python打包和发布package

打包 偶尔有一些复用性很高&#xff0c;复杂度也很高的函数要反复调用&#xff0c;可以自行打包&#xff0c;安装 打包结构如下 以iso_timer为例 mkdir common vim __init__.py cd common vim __init__.py vim format.py# init.py from .common import *# /common/init.p…

C++11 正则表达式详解

目录 1 正则表达式语法1.1 字符和特殊字符1.2 限定符1.3 定位符1.4 选择和反向引用 2 C正则表达式标准库常用接口3 C正则表达式模板的使用3.1 匹配&#xff08;Match&#xff09;3.2 搜索&#xff08;Search&#xff09;3.3 分词&#xff08;Tokenize&#xff09;3.4 替换&…

Python —— hou.NetworkItem class

在一个network内&#xff0c;所有可见元素的基类&#xff1b; 此类没有方法&#xff0c;仅作为 hou.NetworkMovabelItem、hou.NodeConnection 基类存在&#xff0c;这两个子类在网络编辑器内均是可见的&#xff0c;是没有真正有意义的基类的&#xff1b;通过提供一个公共的基类…

【干货】Java函数式编程公式大全,收藏学习!

函数操作是现代编程领域中的核心概念之一&#xff0c;它以类似 Excel 表格的方式进行数据处理和计算。它的特点是使用公式和函数来描述数据之间的关系和计算逻辑&#xff1b;它允许我们以更高效、更有组织的方式管理和处理数据。 在函数式编程中&#xff0c;数据被组织成表格的…

LongAdder为什么在高并发下保持良好性能?LongAdder源码详细分析

文章目录 一、LongAdder概述1、为什么用LongAdder2、LongAdder使用3、LongAdder继承关系图4、总述&#xff1a;LongAdder为什么这么快5、基本原理 二、Striped64源码分析1、Striped64重要概念2、Striped64常用变量或方法3、静态代码块初始化UNSAFE4、casBase方法5、casCellsBus…

如何利用验证链技术减少大型语言模型中的幻觉

一、前言 随着大型语言模型在自然语言处理领域取得了惊人的进步。相信深度使用过大模型产品的朋友都会发现一个问题&#xff0c;就是有时候在上下文内容比较多&#xff0c;对话比较长&#xff0c;或者是模型本身知识不了解的情况下与GPT模型对话&#xff0c;模型反馈出来的结果…

阿里云服务器续费流程_一篇文章搞定

阿里云服务器如何续费&#xff1f;续费流程来了&#xff0c;在云服务器ECS管理控制台选择续费实例、续费时长和续费优惠券&#xff0c;然后提交订单&#xff0c;分分钟即可完成阿里云服务器续费流程&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云服务器详细续费方法&am…

微信扫一扫抽奖活动怎么做

在当今数字化时代&#xff0c;微信作为中国最大的社交媒体平台之一&#xff0c;拥有着庞大的用户群体和广泛的影响力。微信扫一扫抽奖活动作为一种创新的营销方式&#xff0c;可以利用微信的用户基础和社交属性&#xff0c;吸引更多的目标用户参与&#xff0c;提高品牌知名度和…

鸿蒙状态栏设置

鸿蒙状态栏设置 基于鸿蒙 ArkTS API9&#xff0c;设置状态栏颜色&#xff0c;隐藏显示状态栏。 API参考文档 参考文档 新建项目打开之后发现状态栏是黑色的&#xff0c;页面颜色设置完了也不能影响状态栏颜色&#xff0c;如果是浅色背景&#xff0c;上边有个黑色的头&#…

众和策略:题材股什么意思?

题材股是股票商场上的一个术语&#xff0c;许多刚接触股票出资的人可能对它不太熟悉。那么&#xff0c;题材股什么意思呢&#xff1f;在本文中&#xff0c;咱们将从多个角度剖析这个问题&#xff0c;帮忙读者更好地了解。 一、什么是题材股 题材股是指某个工作或主题的股票集结…