为了能在开学后更好地融入实验室,本人计划用一个月的时间进行python3语言入门,该系列笔记适合已经有一门编程语言基础的朋友参考使用,欢迎同道者前来交流 ~
使用教材:
1.《python从入门到精通》清华大学出版社;(自带教学视频【二维码形式】)least 17p/d
2.《机器学习》周志华(西瓜书) 清华大学出版社; least 14p/d;
3. BiliBili 《和美女老师一起学python》视频。
………………………………
(一)异常处理及程序调试
一、异常处理
1.1常见的异常
程序会引发很多种异常,以下是较为常见的几种:
异常 | 描述 |
---|---|
NameError | 尝试访问一个没有声明的变量的错误 |
IndexError | 索引超出序列范围引发的错误 |
IndentationError | 缩进错误 |
ValueError | 传入的值错误 |
KeyError | 请求一个不存在的字典关键字的错误 |
IOError | 输入输出错误 |
ImportError | import语句无法找到模块 |
AttributeError | 尝试访问未知的属性引发的错误 |
TypeError | 类型不合适引发的错误 |
MemoryError | 内存不足 |
ZeroDivisionError | 除数为零引发的错误 |
……………………………………
1.2 异常处理语句
主要的异常处理语句有以下几种,它们彼此之间是递进的关系:
① try……except
使用方法为:在try语句块中放入可能出现问题的语句,except语句块中放入解决办法。
使用举例:
try:
division()
except ZeroDivisionError:
print("出错啦")
except后面的ZeroDivisionError就是错误类型名
注意:
当程序出错时,它会输出错误信息,然后继续向下运行。
…………………………
② try…except…else
前面都一样,else用于指定当try语句块中没有发现异常时输出的语句
try:
division()
except ZeroDivisionError:
print("出错啦")
else:
print("顺利完成,没有错误")
③ try…except…finally
finally语句块中放入无论是否出现错误都要执行的语句。
try:
division()
except ZeroDivisionError:
print("出错啦")
else:
print("顺利完成,没有错误")
finally:
print("程序结束")
以上三种异常语句的执行关系如图:
*暂时不想处理的异常可以使用raise语句进行抛出。
…………………………
二、程序调试
程序测试方法一共有两种,第一种是使用自带的IDLE进行debug,第二种是使用assert语句来进行调试。
1.使用IDLE进行debug
这种debug的方式最关键之处在于 添加断点 。添加断点的目的是看某个变量在程序运行到某个位置的时候是什么值。
使用方式:
1)打开IDLE,在主菜单选择Debug ->Debugger选项,这时候就会打开Debgy Control对话框,同时python shell窗口中显示 [Debug On]
2)在python shell 中选择 File ->Open选项,打开要调试的文件,然后添加断点。
3)添加断点的方式:在想要添加断点的行上右击,在弹出的快捷菜单中选择Set Breakpoint菜单项。被添加断点的行将以黄色底纹标记。
4)如果想要删除已经添加的断点,可以选中已经添加断点的行,然后右击,在弹出的快捷菜单中选择Clear Breakpoint菜单项。
*设置断点后,程序执行到断点时就会自动中断执行,结束调试后,程序可以随时继续。
5)添加好断点后,运行程序,这是在Debug Control中将显示程序的执行信息。
6)单击Go按钮,程序会继续向下执行至下一个断点。
…………………………
2.使用assert语句进行调试
assert在中文中的意思是断言,它一般用于对程序某个时刻必须满足的条件进行验证。
比如:
assert apple > children,"苹果不够分"
这是一个给小朋友分苹果的案例,可以看到,assert语句具有两个参数,在assert后面的是一个判断语句,用逗号连接的下一个参数是可选参数,在这里会解释如果出错的话原因是什么。
(如果判断条件是假,才会中断并弹出后面的原因)
通常情况下,assert语句会和异常处理语句一起使用。
try:
division()
except AssertionError as e:
print("\n苹果不够分")
…………………………
(二)文件及目录操作
一、文件操作
1. 创建和打开文件
file = open(filename[,mode[,buffering]])
filename: 要打开的文件名;
mode : 打开文件的方式;
buffering : 缓冲区设置。
其中buffering为可选参数。
mode参数值说明:
值 | 说明 |
---|---|
r | 只读方式打开文件,文件指针放在文件的开头 |
r+ | 打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件头开始覆盖) |
w | 只写方式打开文件 |
w+ | 打开文件后,先清空原有内容,使其变成一个空的文件,再对这个文件执行写权限 |
a | 以追加模式打开一个文件,如果该文件已经存在,则文件指针会在文件的末尾,否则,创建新文件用于写入 |
a+ | 以读写方式打开文件,如果文件已经存在,则文件指针将会在文件的末尾 |
…………………………
2. 关闭文件
file.close()
…………………………
3. 写入文件内容
使用write方法向文件写入内容
file.write(string)
…………………………
4 读取文件
4.1 读取指定字符
file.read([size])
file是文件对象,size是可选参数,用于指定要读取的字符个数,如果省略则一次性读取所有内容。
注意:
read方法读取文件时是直接从文件头开始读取的。
4.2 将文件指针移动到指定位置
file.seek(offset[,whence])
offset: 表示要移动的字符个数;
whence:用于指定从什么位置开始计算,值为0表示从文件头开始计算,1表示从当前位置开始计算;2表示从文件尾开始计算,默认为0
4.3 读取一行
file.readline()
4.4 读取全部行
file.redlines() 返回的是一个字符串列表,每行的内容作为一个元素。
…………………………
二、目录操作
1.os 与os.path 模块
目录操作存在的目的是为了快速找到文件.
目录操作使用两个内置的模块——os 和 os.path
os模块:是python内置的与操作系统功能和文件系统相关的模块。该模块中的语句的执行结果通常与操作系统有关,在不同操作系统上运行,可能会得到不一样的结果。
比如:
在os 系统中输入os.name。
【windows系统——输出nt; Linux\Unix\MacOS操作系统——输出posix】
引入os模块:
import os
——os模块操作目录的函数一览——
函数 | 说明 |
---|---|
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) | 创建目录 |
makedirs(path1/path2…[,mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/paht2…) | 删除多级目录 |
chdir(path) | 把path设置为当前工作目录 |
walk(top[,topdown[,onerror]]) | 遍历目录树,该方法返回一个元组,包括所有路径名 |
——os.path 模块操作目录的函数一览——
函数 | 说明 |
---|---|
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断目录或文件是否存在,如果存在则返回True,否则返回FALSE |
join(path,name) | 将目录与目录或文件名拼接起来 |
splitext() | 分离文件名与扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为有效路径 |
…………………………
2.路径
1.相对路径
在python中,可以通过os模块提供过的getcwd()函数获取当前工作目录,使用方式为:
import os
print(os.getcwd()) #输出当前目录
相对路径依赖于当前工作目录。
2.获得绝对路径的方式
os.path.abspath(path)
3.拼接路径
如果想要将两个或者多个路径拼接到一起组成一个新的路径,可以使用os.path模块提供的join()来实现。
它的基本语法为:
os.pth.join(path1[.path2[,...]])
4.判断目录是否存在
os.path.exists(path)
如果路径存在,就返回True;如果路径不存在,就返回FALSE。