学习Python的8天

news2024/11/24 14:48:24

1、异常处理机制

  Python 中,用try except语句块捕获并处理异常,其基本语法结构如下所示:

try:
    可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]:#(e是别名,可以自己起)
    处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
    处理异常的代码块2
except  [Exception]:
    处理其它异常

  该格式中,[] 括起来的部分可以使用,也可以省略。其中各部分的含义如下:

  • (Error1, Error2,…) 、(Error3, Error4,…):其中,Error1、Error2、Error3 和 Error4 都是具体的异常类型。显然,一个 except 块可以同时处理多种异常。
  • [as e]:作为可选参数,表示给异常类型起一个别名 e,这样做的好处是方便在 except 块中调用异常类型(后续会用到)。
  • [Exception]:作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个 except 块。

  从try except的基本语法格式可以看出,try 块有且仅有一个,但 except 代码块可以有多个,且每个 except 块都可以同时处理多种异常。


try except 语句的执行流程如下:

  1.首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常
  2.当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为处理异常
  3.如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。

  事实上,不管程序代码块是否处于 try 块中,甚至包括 except 块中的代码,只要执行该代码块时出现了异常,系统都会自动生成对应类型的异常。但是,如果此段程序没有用 try 包裹,又或者没有为该异常配置处理它的 except 块,则 Python 解释器将无法处理,程序就会停止运行;反之,如果程序发生的异常经 try 捕获并由 except 处理完成,则程序可以继续执行。


示例:

try:
    a = int(input("输入被除数:"))
    b = int(input("输入除数:"))
    c = a / b
    print("您输入的两个数相除的结果是:", c )
except (ValueError, ArithmeticError):
    print("程序发生了数字格式异常、算术异常之一")
except :
    print("未知异常")
print("程序继续运行")

运行结果为:
在这里插入图片描述
程序出错了 try里面的内容不会被执行
在这里插入图片描述


  上面程序中,第 6 行代码使用了(ValueError, ArithmeticError)来指定所捕获的异常类型,这就表明该 except 块可以同时捕获这 2 种类型的异常;第 8 行代码只有 except 关键字,并未指定具体要捕获的异常类型,这种省略异常类的 except 语句也是合法的,它表示可捕获所有类型的异常,一般会作为异常捕获的最后一个 except 块。

  除此之外,由于 try 块中引发了异常,并被 except 块成功捕获,因此程序才可以继续执行,才有了“程序继续运行”的输出结果。


获取特定异常的有关信息

  通过前面的学习,我们已经可以捕获程序中可能发生的异常,并对其进行处理。但是,由于一个 except 可以同时处理多个异常,那么我们如何知道当前处理的到底是哪种异常呢?

  其实,每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:

  • args:返回异常的错误编号和描述字符串;
  • str(e):返回异常信息,但不包括异常信息的类型;
  • repr(e):返回较全的异常信息,包括异常信息的类型。
try:
    1/0
except Exception as e:
    # 访问异常的错误编号和详细信息
    print(e.args)
    print(str(e))
    print(repr(e))

运行结果为:
在这里插入图片描述

  从程序中可以看到,由于 except 可能接收多种异常,因此为了操作方便,可以直接给每一个进入到此 except 块的异常,起一个统一的别名 e。


Python try except finally:资源回收

  Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。

  在整个异常处理机制中,finally 语句的功能是:无论 try 块是否发生异常,最终都要进入 finally 语句,并执行其中的代码块

示例:

try:
    a = int(input("请输入 a 的值:"))
    print(20/a)
except:
    print("发生异常!")
finally :
    print("执行 finally 块中的代码")

运行结果为:
在这里插入图片描述

  可以看到,当 try 块中代码没有发生异常时,except 块不会执行,finally 块中的代码会被执行。

在这里插入图片描述
  可以看到,当 try 块中代码发生异常时,except 块得到执行,而finally 块中的代码仍然会被执行。

  finally 块的强大还远不止此,即便当 try 块发生异常,且没有合适和 except 处理异常时,finally 块中的代码也会得到执行。例如:

try:
    #发生异常
    print(20/0)
finally :
    print("执行 finally 块中的代码")

运行结果为:
在这里插入图片描述

  可以看到,当 try 块中代码发生异常,导致程序崩溃时,在崩溃前 Python 解释器也会执行 finally 块中的代码。


2、Python模块和包

2.1 什么是Python模块

  模块,可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。

示例

在相同的目录下导入模块

在同一目录下目录下(桌面也可以)创建一个名为 hello.py 文件,其包含的代码如下:

def say ():
    print("Hello,World!")

在同一目录下,再创建一个 say.py 文件,其包含的代码如下:

#通过 import 关键字,将 hello.py 模块引入此文件
import hello
hello.say()

运行 say.py 文件,其输出结果为:

Hello,World!

在不相同的目录下导入模块

在目录D:\Download\python\p1\P1_1创建一个名为 TXJS.py 文件,其包含的代码如下:

import math  #导入 python的内置函数 math库

# 图形计算
#计算圆形周长
def yuanZc(b): #同时返回多个值
    zc = 2 * math.pi * b  #2Πr
    return zc  #将周长返回

在目录D:\Download\python\p1,创建一个 DRK.py 文件,其包含的代码如下:

# 导入模块
import P1_1.TXJS
print(P1_1.TXJS.yuanZc(6))

运行 DRK.py 文件,其输出结果为:

37.69911184307752

  当调用模块中的 say() 函数时,使用的语法格式为“模块名.函数”,这是因为,相对于 say.py 文件,hello.py 文件中的代码自成一个命名空间,因此在调用其他模块中的函数时,需要明确指明函数的出处,否则 Python 解释器将会报错。


2.2 Python导入模块

import 模块名 as 别名

  import 模块名1 [as 别名1], 模块名2 [as 别名2],…:使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。

# 导入sys整个模块
import sys
# 使用sys模块名作为前缀来访问模块中的成员
print(sys.argv[0])

  上面第 2 行代码使用最简单的方式导入了 sys 模块,因此在程序中使用 sys 模块内的成员时,必须添加模块名作为前缀

  运行上面程序,可以看到如下输出结果(sys 模块下的 argv 变量用于获取运行 Python 程序的命令行参数,其中 argv[0] 用于获取当前 Python 程序的存储路径)

D:/Download/python/p1/hello.py

导入整个模块时,也可以为模块指定别名。例如如下程序:

# 导入sys整个模块,并指定别名为s
import sys as s
# 使用s模块别名作为前缀来访问模块中的成员
print(s.argv[0])

  第 2 行代码在导入 sys 模块时才指定了别名 s,因此在程序中使用 sys 模块内的成员时,必须添加模块别名 s 作为前缀。运行该程序,可以看到如下输出结果:

D:/Download/python/p1/hello.py

也可以一次导入多个模块,多个模块之间用逗号隔开。例如如下程序:

# 导入sys、os两个模块
import sys,os
# 使用模块名作为前缀来访问模块中的成员
print(sys.argv[0])
# os模块的sep变量代表平台上的路径分隔符
print(os.sep)

  上面第 2 行代码一次导入了 sys 和 os 两个模块,因此程序要使用 sys、os 两个模块内的成员,只要分别使用 sys、os 模块名作为前缀即可。在 Windows 平台上运行该程序,可以看到如下输出结果(os 模块的 sep 变量代表平台上的路径分隔符):

D:/Download/python/p1/hello.py
\

在导入多个模块的同时,也可以为模块指定别名,例如如下程序:

# 导入sys、os两个模块,并为sys指定别名s,为os指定别名o
import sys as s,os as o
# 使用模块别名作为前缀来访问模块中的成员
print(s.argv[0])
print(o.sep)

  上面第 2 行代码一次导入了sys 和 os 两个模块,并分别为它们指定别名为 s、o,因此程序可以通过 s、o 两个前缀来使用 sys、os 两个模块内的成员。在 Windows 平台上运行该程序,可以看到如下输出结果:

D:/Download/python/p1/hello.py
\

3、随机函数

1. random()函数
描述:random() 方法返回随机生成的一个实数,它在[0,1)范围内。

语法:

import random
random.random();

注意:random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。

实例:

import random
num = random.random()
print(num)

运行结果为:

0.5915081707521336

2. randrange()函数
描述: randrange() 方法返回指定递增基数集合中的一个随机数,基数缺省值为1。返回一个整数

语法:

import random
random.randrange ([start,] stop [,step])

参数:

start – 指定范围内的开始值,包含在范围内
stop – 指定范围内的结束值,不包含在范围内。
step – 指定递增基数

实例:

import random


num0 = random.randrange(5) #随机取0到5的数,不包括5

num1 = random.randrange(5,10) #随机取5到10的数,不包括10

num2 = random.randrange(5,10,3)#从5到10的数,随机取指定递增基数为3的数,如:5,8

num3 = random.randrange(5,10,3)

print(num0)
print(num1)
print(num2)
print(num3)

执行结果为:

1
7
5
8

3.randint()函数
描述:randint()方法将随机生成一个整数,它在[x,y]范围内 ;有点等价于randrange(x,y+1)。

语法:

import random
random.randint(x,y)

参数:

x – 指定范围内的开始值,包含在范围内
y – 指定范围内的结束值,包含在范围内。

实例:

import random
# random.ranint(start,stop),产生一个从start到stop之间的随机整数,包含start和stop
import random as rd
print(rd.randint(1,3))  #随机输出1到3的数字,包括3

执行结果为:

3

4. uniform()函数
描述:uniform() 方法将随机生成下一个实数,它在[x,y]范围内。返回一个浮点数 。

语法:

import random
random.uniform (x,y)

参数:
x – 指定范围内的开始值,包含在范围内。
y – 指定范围内的结束值,包含在范围内。

实例:

>>> print random.uniform(5,10);
9.13282585434
>>> print random.uniform(9,10);
9.95958315062

5. choice()函数
描述:choice() 方法返回一个列表,元组或字符串的随机项。

语法:

import random
random.choice(x)

参数:
x – list,tuple,strings的一种

实例:

import random
num0 = random.choice(('a','be',5,'e'))

num1 = random.choice([10,2,6,5,85,'af'])

num2 = random.choice('i love python')

print(num0, num1, num2)

运行结果为:

5 2 y

6. sample()函数
描述:sample()方法返回随机从列表,元组或字符串其中部分随机项 ;返回类型为元组类型。

语法:

import random
random.sample(x,n)

参数:
x – list,tuple,strings的一种
n – 返回n个随机项

实例:

>>> print random.sample('i love python',3)
[' ', 'e', 'i']
>>> print random.sample([10,20,50,23,'ab'],3)
[50, 'ab', 23]
>>> print random.sample((10,20,50,23,'ab'),3)
[50, 20, 'ab'] 

7. shuffle()函数
描述:shuffle() 方法将序列的所有元素随机排序。类似于洗牌。

语法 :

import random
random.shuffle(x)

参数:
x – list,tuple的一种;python2.x只支持list类型

实例:

>>> list=['a','b','c','d','e'];
>>> random.shuffle(list);
>>> print list;
['c', 'd', 'a', 'e', 'b'] 

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

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

相关文章

【强化学习论文合集 | 2020年合集】一. ICML-2020 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

Workfine使用Oracle Express Edition数据库

Workfine 应用环境和工具 Win10 专业版操作系统Windows Terminaldocker desktop 4.10.1 安装设置Oracle Express Edition数据库 1、获取Oracle XE 18.4.0 docker 镜像,在 Windows Terminal 终端里执行如下命令 docker pull gvenzl/oracle-xe:18.4.0 2、下载成功…

小啊呜产品读书笔记001:《邱岳的产品手记-14》第26讲 写好产品文档的诀窍 第27讲 产品案例分析: QuartzHooked的对话式交互

小啊呜产品读书笔记001:《邱岳的产品手记-14》第26讲 写好产品文档的诀窍 & 第27讲 产品案例分析: Quartz&Hooked的对话式交互一、今日阅读计划二、泛读&知识摘录1、第26讲 写好产品文档的诀窍2、第27讲 产品案例分析: Quartz&am…

web前端-javascript-function函数(函数说明,创建和调用函数,其他方法函数声明创建函数、函数表达式创建函数)

函数 //var fun new Function("console.log(Hello 这是我的第一个函数);"); //fun();function fun2() {console.log("这是我的第二个函数");alert("哈哈哈哈");document.write("~~~~(>_<)~~~~"); }//console.log(fun2); //调用…

[附源码]计算机毕业设计springboot惠农微信小程序论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Nginx加载Lua脚本lrucache缓存

1、简介 lrucache缓存是单进程的&#xff0c;就像redis一样&#xff0c;所以不需要锁。 2、nginx配置 #lua_code_cache off; # 把这个缓存打开&#xff0c;因为里面的在new对象的时候&#xff0c;只允许实例一个对象&#xff0c;如果不打开的话 # 每次次请求会创建一个对象&a…

RK3588平台开发系列讲解(DisplayPort篇)DP相关模式说明

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、DP Alt Mode二、DP Legacy Mode2.1、Controller2.2、PHY三、Split Mode沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍DP的相关模式。

KNN最近邻算法分析及实现(Python实现)

KNN最近邻算法分析及实现&#xff08;代码附录后文&#xff09;1 KNN算法简介2 KNN基本原理3 简单实现KNN分析代码附录(Python)&#xff1a;呆&#xff0c;站住别跑&#xff0c;留个赞&#xff0c;给个关注嘛都看到这了Author&#xff1a; Nirvana Of Phoenixl Proverbs for yo…

Mysql视图和触发器

视图 视图是什么&#xff0c; 是否真实存在? 个人理解&#xff1a;视图视图&#xff0c;只是你可以看见的一层抽象层, 它并不真实存在, 而是在真实存在的一张或者多张表之上的一层封装, 对于select查询语句的提前封装. 不涉及数据的存储. 这样的一层封装好处是蛮多的. 对于…

Kamiya丨Kamiya艾美捷小鼠转铁蛋白ELISA说明书

Kamiya艾美捷小鼠转铁蛋白ELISA预期用途&#xff1a; 小鼠转铁蛋白ELISA是一种高灵敏度的双位点酶联免疫分析&#xff08;ELISA&#xff09;小鼠生物样品中转铁蛋白的测定。仅供研究使用。 引言 转铁蛋白是一种金属结合蛋白&#xff0c;可逆地与血浆中的酸溶性铁结合。它的功…

python中json的使用dump,dumps,loads,load简单了解

参考&#xff1a;https://www.runoob.com/python3/python3-json.html&#xff0c;https://zhuanlan.zhihu.com/p/264393909 json的作用 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 &#xff08;图片是参考链接中的图片&#xff09; json.dumps(): 对数据…

Node.js 入门教程 26 npm 依赖与开发依赖 27 Node.js 包运行器 npx

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程26 npm 依赖与开发依赖27 Node.js 包运行器 npx27.1 轻松地运行本地命令27.2 无需安装的命令执行27.3 使用不同的 Node.js …

[SWPUCTF 2018]SimplePHP

考点&#xff1a;文件上传 试了一下&#xff0c;直接上传php文件是不行的&#xff0c;.user.ini和.htaccess也不行 能看到有提示&#xff0c;flag在f1ag.php中 在查看文件功能处发现get传参&#xff0c;可能是文件包含 尝试包含当前页面 ?filefile.php 得到 <?php h…

一些感悟(随笔小记)

不知不觉已经坚持快70天了&#xff0c;之前虽然断断续续学过几个月但是没有形成自己的体系&#xff0c;导师安排的各种任务和课程也极大的影响了自己自学的进度&#xff0c;当时真的很迷茫。好在因为那一股冲劲制定了百日救赎计划&#xff0c;虽然在庞大的知识体系中100天真的微…

精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

11月18日&#xff0c;2022年第五届中国金融科技产业大会暨第四届中新&#xff08;苏州&#xff09;数字金融应用博览会“基础软件与云原生系统软件”分论坛成功举办。该论坛由由中国计算机学会CTO CLUB&#xff08;苏州&#xff09;承办&#xff0c;江苏省金融科技云原生融合创…

【Kubernetes系列】工作负载资源之StatefulSet

StatefulSet概述解决的问题组件Pod 选择算符卷声明模板最短就绪秒数更新策略滚动更新分区滚动更新最大不可用 Pod强制回滚副本数StatefulSet的网络标识StatefulSet存储状态概述 StatefulSet 是用来管理有状态应用的工作负载 API 对象。 StatefulSet 用来管理某 Pod 集合的部署…

IDEA的乱码与file.encoding = UTF-8

file.encoding UTF-8的作用其实就是使用UTF-8作为文件encoding和decoding时的默认方案。 我们知道存储文本文件时&#xff0c;文本变为二进制时要对文件进行encoding&#xff0c;这是一个字节转字符的过程&#xff0c;转换的具体工作由JAVA的API完成&#xff08;例如&#xf…

ACM近年区域赛的所有题型

之前写了个退役文章记录想记录下&#xff0c;但是没有干货&#xff0c;还是给删了&#xff0c;所以前面的是退役小记&#xff0c;后面是我个人写近2年所有区域赛场次记录的题型 目录 退役小记&#xff08;没兴趣可以不看&#xff09; 这里简单记下我的acm生涯 省赛和三场区…

MySQL第一弹

目录 一、数据库的基本概念 1、数据 (Data) 2、表 3、数据库 4、数据库管理系统(DBMS) 5、数据库系统 6、DBMS的工作模式如下 二、数据库的发展史 1.第一代数据库&#xff08;淘汰&#xff09; 2.第二代数据库&#xff08;现在用的基本上都是二代&#xff09; 3.第…

Netty02——Netty 入门

目录1.概述1.1.Netty 是什么&#xff1f;1.2.Netty 的作者1.3.Netty 的地位1.4 Netty 的优势2. Hello World2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理2.5.提示3. 组件3.1 EventLoop3.1.1.概述3.1.2.案例演示3.2 Channel3.2.1.ChannelFuture3.2.2.CloseFuture3.2.3.异步提升的…