python课程回顾复习记录简要7

本文详细介绍了Python中的异常处理机制,包括try-except-else-finally的使用,以及如何捕获和处理不同类型的异常。同时,还探讨了模块的概念,强调了模块在组织代码和复用性方面的重要性。通过导入和使用模块,可以提高代码的可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常处理与模块
在编程中,异常是程序在运行时发生的不正常事件,通常它会打断程序指令的正常执行。对于一些优良的程
序,开发者应该在程序产生异常时,提供处理这些不正常事件的处理方法,而使程序不会因为异常的产生而阻断程序的执行或产生不可预见的结果。
在 Python 中,对异常最好的描述是:异常是因为程序出现了错误而在正常控制以外而采取的行为措施。这
个行为措施又分为两个阶段,阶段一是异常引发的错误信息,阶段二是检测阶段(或异常处理阶段)。
在这里插入图片描述
可以让开发人员在异常发生时更直接地控制它们,此时,开发人员不仅有检测错误的能力,还可以在它们发生时采取更可靠的补救处理措施,这样就打打提高了程序的健壮性。
python中的异常
在这里插入图片描述
1.捕获异常
捕获异常主要是通过 try、except、else、finally 等关键字来完成,通常情况下,捕获异常可以通过 try 语句来检测异常,注意任何在 try 语句块里的代码都会被检测,主要是检测有无异常发生
常见的捕获异常的语法格式如下:

try: ##检测异常的代码
	可能产生异常的代码
except 异常名称 1: ##对应异常 1
	异常的处理代码 1
except 异常名称 2: ##对应异常 2
	异常的处理代码 2
...
finally:
	无论如何都会执行的代码
try:
    print("abc")
    print(age)
    pirnt("haha")
except NameError:   #名称也可以不写
    print("引发一个错误")
print("helloworld")

在这里插入图片描述
出现异常后执行except里的语句,try里边异常后的语句不执行了,except可以写多个
else 关键字应用在 if 语句/for 中,表示当条件不满足时执行的操作,其实,else 同样适用于 try-except 捕获
异常语句中,即若没有捕获到异常,则执行 else 后的相关操作

try: ##检测异常的代码
	可能产生异常的代码
except 异常名称 1: ##对应异常 1
	异常的处理代码 1
except 异常名称 2: ##对应异常 2
	异常的处理代码 2
...
else: #判断是否有异常!
	...没有检测到到异常
try:
    print("abc")
    a=10/1
except NameError:
    print("引发一个错误")
else:
    print("没有捕获到异常")
print("helloworld")

在这里插入图片描述
当有捕获多个异常且需要获取到具体的某个异常描述信息时,此时就可使用下列语法:

try: ##检测异常的代码
	可能产生异常的代码
except (异常名称,名称 2) as 变量名: ##对应异常,并把异常信息存储在变量中
	异常的处理代码
try:
    print("abc")
    a=10/0
except ZeroDivisionError as msg:
    print("引发一个错误:",msg)
else:
    print("没有捕获到异常")
print("hello

在这里插入图片描述
当要捕获所有的异常信息时,此时就需要使用到Exception类,语法格式:

try: ##检测异常的代码
可能产生异常的代码
except Exception as  变量名: ##对应的所有异常,并把异常信息存储在变量中 Exception 父类
	异常的处理代码
try:
    print("abc")
    print(name)  #异常1
    a=10/0  	#异常2
except Exception as msg: #异常父类
    print("引发一个错误:",msg)
    print(type(msg))  #异常类型
else:
    print("没有捕获到异常")
print("helloworld")

在这里插入图片描述
try-finally 语句中的 finally 后的代码是必须执行,即无论异常是否引发都要执行,此时就要使用到 finally,比如关闭文件、释放锁等,语法格式如下:

try: ##检测异常的代码
	可能产生异常的代码
except 异常名称: ##对应异常
	异常的处理代码
...
finally:
	无论如何都会执行的代码
try:
    file=open("hello.txt","r")  #异常
except Exception as msg:
    print("引发一个错误:",msg)
    print(type(msg))
else:  #如果没有异常执行的代码
    print("没有捕获到异常")
finally:   #最后会执行的代码
    print("一定会执行的代码")
print("helloworld")

在这里插入图片描述
向上抛出异常指的是不对当前异常进行处理而使用 raise 关键字直接向上抛出该异常,注意:若想要让程序最终不中断,因此需要到调用处再次捕获异常并进行处理。
除了可以向上抛出 Python 内部已定义的异常类外,还可以向上抛出自定义的异常类,且此时自定义
的异常类必须是 Error 或 Exception 的子类

raise 自定义异常类名(...)
#自定义异常类
class ShowAgeError(Exception):
    def __init__(self,error_msg):
        print("ShowAgeError:",error_msg)
class Student:
    def __init__(self):
        self.__age=0
    #封装
    def set_age(self,age):
        if 0 <= age <= 130:
            self.__age = age
        else:
        # self.__age = 18
            raise ShowAgeError("年龄值为 0-130 才正确!")
    def get_age(self):
        return self.__age
#测试
student=Student()
student.set_age(-18)
print(student.get_age())

在这里插入图片描述
模块
Python 模块(Module),是一个以.py 结尾的 Python 文件,包含了 Python 对象定义和 Python 语句。使用模块有助于逻辑的组织 Python 代码片段,通常情况下,我们把具有某些特定功能的代码分配到一个模块里,这样能使代码更好用、易懂。
在 Python 模块中,可以定义函数、类和变量,此外,模块里还可以包含
可执行的代码。

需要注意的是,在 Python 中,可以使用 Python 给开发者提供的模块(Python 解释器给我们写好的模块,
os/random),如 math、time、random 等,也可以使用开发者自定义的模块(自己写,自己发布、安装)。但在使用模块前,都需要将模块通过 import 关键字导入相应的模块。

<think>嗯,用户想复习Python爬虫的静态页面抓取方法,需要提供一个教程。首先,我得回忆一下静态页面抓取的基本步骤和相关库。记得常用的库有urllib和requests,这两个都是Python自带的或者第三方常用的。用户可能已经有一些基础,但需要系统性的复习,所以结构要清晰。 首先,应该分步骤讲解,从发送HTTP请求开始。然后处理请求头,设置超时和重试,处理响应内容,比如状态码和编码,最后解析内容,比如用BeautifulSoup。还要注意代码示例的正确性,确保用户能复制运行。 用户提供的引用里提到了urllib.request和requests库的使用,还有状态码、编码这些关键点。需要把这些内容整合到教程中,同时保持逻辑连贯。可能还需要比较不同库的优缺点,比如urllib是标准库,而requests更简洁。 另外,用户可能对实际操作中的常见问题感兴趣,比如处理异常、设置请求头防止被屏蔽,或者解析HTML时的选择器使用。需要覆盖这些点,但不要过于深入,保持教程的复习性质。 还要注意引用标记,每个引用来源在适当的地方标注。比如,讲解请求过程时引用[^1],urllib的例子引用[^2],requests的例子引用[^3]。确保引用自然,不打断内容流畅性。 可能还需要提醒用户注意法律和道德规范,比如遵守robots.txt,不过用户的问题主要是技术方法,这部分可以放在注意事项里简要提及。 最后生成相关问题,帮助用户进一步学习。问题要围绕静态页面抓取的扩展知识,比如动态页面对比、反爬策略、数据处理等。这样用户可以根据问题继续深入学习。 检查一下是否有遗漏的关键点,比如处理GET和POST请求,或者保存抓取的数据。不过静态页面抓取主要是GET,所以可能不需要涉及POST。保存数据可以作为扩展,但用户需求是复习基本方法,所以可能不需要深入。 确保代码示例正确,比如urllib的import和requests的使用,特别是decode和.text的区别。还有状态码检查,200表示成功,这些要提到。 总结下来,结构应该是: 1. 概述静态页面抓取 2. 使用urllib库的步骤和示例 3. 使用requests库的步骤和示例 4. 解析HTML(BeautifulSoup) 5. 注意事项 6. 相关问题 每个部分配合引用和代码示例,确保用户能一步步回顾知识点。需要语言简洁,步骤明确,避免复杂术语,但保持专业性。</think>### Python静态页面抓取方法教程 #### 一、静态页面抓取原理 静态网页内容直接存储在服务器中,通过HTTP请求可直接获取HTML源码。爬虫的核心步骤包括**发送请求**、**获取响应**、**解析内容**三部分。 --- #### 二、使用urllib库实现 Python内置的`urllib`是基础HTTP请求库,适合简单场景: ```python import urllib.request # 发送请求 response = urllib.request.urlopen('http://www.example.com') # [^2] # 读取内容(需指定编码) html = response.read().decode('UTF-8') print(html) ``` **关键参数:** - `timeout=10`:设置超时时间 - `headers={}`:添加请求头模拟浏览器 --- #### 三、使用requests库实现(推荐) 第三方库`requests`提供更简洁的API: ```python import requests # 带请求头的GET请求 headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get('https://blog.example.com', headers=headers) # [^3] # 检查状态码 if response.status_code == 200: print("编码方式:", response.encoding) print("网页内容:", response.text) ``` --- #### 四、HTML解析方法 使用`BeautifulSoup`解析获取的内容: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') title = soup.find('h1').text # 提取标题 links = [a['href'] for a in soup.find_all('a')] # 提取所有链接 ``` --- #### 五、注意事项 1. **请求频率控制**:添加`time.sleep(2)`避免被封禁 2. **异常处理**:使用`try-except`捕获`ConnectionError` 3. **编码检测**:优先使用`response.apparent_encoding`自动检测编码 4. **遵守robots协议**:检查`/robots.txt`文件 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值