30.python的异常处理机制
语法
try :
except 异常类型:
except 异常类型:
else :
示例:实现两个整数的除法
try :
a = int (input ('请输入第一个整数:' ))
b = int (input ('请输入第二个整数:' ))
result = a / b
except ZeroDivisionError:
print ('除数不能为0!' )
except ValueError:
print ('只能输入数字' )
else :
print ('结果为:' , result)
try...except...else结构:如果try块中没有抛出异常,则执行else块,否则执行except块
try...except...else...finally结构:finally块无论是否发生异常都会被执行,常用来释放try块中申请的资源。
python中常见的异常类型
ZeroDivisionError:除零或者取模零
IndexError:序列中不存在此索引
KeyError:映射中没有这个键
NameError:未声明对象或者属性
SyntaxError:语法错误
ValueError:无效的参数
traceback模块:可以使用traceback模块打印异常信息
import traceback
try :
print (1 / 0 )
except :
traceback.print_exc()
31.模块
1.模块的定义
在python中一个扩展名为.py的文件就是一个模块。在每个模块的定义中都包含一个记录模块名称的变量_name_。顶级模块(文件被当做脚本执行)的__name__变量的值为__main__。当python源文件被当做模块导入时:__name__等于模块名
#在自定义模块example.py中让其以主程序运行:右键,run example
if __name__ == '__main__ ':
main()
2.模块的导入
模块的导入:使用import xxx
方式进行导入时,其后面只能跟包名或者模块名;使用from...import
可以导入模块名/函数名/属性名。这些方式只能导入模块的公有属性/类/函数
import 模块名称 [as 别名]
#将包导入后,解释执行当前包下的__init__.py文件
import 包名
from 模块名称 import 函数/变量/类
#将某个模块中的公有函数,变量,类等全部导进来
from 模块名称 import *
from 包名 import 模块名
#如果包里还有包则
from 包名.子包名 import 模块名
__all__
属性:用于在当前模块中定义其他模块可以导入的属性/类/函数。不希望其他模块导入使用的属性/类/函数,则不定义在__all__
属性中。
# 使用from xxx import *导入方式时,_func1和__func2函数在其他模块中可以使用
__all__ = ['_func1' , '__func2' ]
def _func1():
print ("func1()" )
def __func2():
print ("func2()" )
# 使用from xxx import *导入方式时,func 函数在其他模块中不能使用
# 但是可以通过from xxx import func 的导入方式,在其他模块中使用func 函数
def func () :
print ("func()" )
32.包
python中的包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下。为了避免模块名冲突,引入了包。
包与目录的区别:包含_init_.py文件的目录称为包;而目录里通常不包含该文件。总之,包等同于包含_init_.py文件的目录,模块等同于python源文件。
模块的导入
import 包名.模块名
python中常用的模块
random模块:这个模块可以用于生成随机数,示例:
import random
# 使用默认种子生成[0 ,1 )范围内的随机数
random .seed()
number = random .random ()
print (number)
request模块这个模块可以用于向后端发送HTTP请求,示例
import requests
status = requests.get('https://www.runoob.com/' , verify=False )
print (status.status_code)
print (status.text)
operator模块:这个模块提供了和python内置的运算符功能一致的函数,示例如下
import operator
print (operator .contains("helloworld" , "hello" )) # True
urllib库:这个库用于操作url,并对url的响应进行处理
from urllib.request import urlopen
results = urlopen("http://www.baidu.com/" )
print (results.read())
print (results.getcode())
import urllib.robotparser
rp = urllib.robotparser.RobotFileParser()
rp.set_url("https://www.baidu.com/robots.txt" )
rp.read()
print (rp.can_fetch("*" , "https://www.baidu.com/robots.txt" ))
json模块:这个模块可以对json数据进行编解码
threading/_thread模块:两者都和多线程相关。
创建线程
方式1:使用threading模块创建线程
import threading
class MyThread (threading.Thread):
def __init__ (self, threadId, threadName ):
threading.Thread.__init__(self)
self.threadId = threadId
self.threadName = threadName
def run (self ):
print (f'线程id:{self.threadId} ,线程名称:{self.threadName} ' )
t1 = MyThread(1 , "thread-1" )
t2 = MyThread(2 , "thread-2" )
t1.start()
t2.start()
t1.join()
t2.join()
方式2:使用_thread模块的start_new_thread方法创建线程:
import _thread
def func () :
for i in range (10 ):
print (i)
tid = _thread.start_new_thread(func , () )
print (tid)
while 1 :
pass
线程同步:
方式1:使用互斥锁,通过threading.lock方法创建
socket模块:这个模块用于网络编程
创建套接字:使用socket模块中的socket函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)