Python入门笔记(三)(上)

简介: Python入门笔记(三)

第十二章 异常处理


程序将停止,并显示一个traceback。


12.1 常见异常


AssertionError 断言语句(assert)失败
AttributeError 尝试访问未知的对象属性
EOFError 用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError 浮点计算错误
GeneratorExit generator.close()方法被调用的时候
ImportError 导入模块失败的时候
IndexError 索引超出序列的范围
KeyError 字典中查找一个不存在的关键字
KeyboardInterrupt 用户输入中断键(Ctrl+c)
MemoryError 内存溢出(可通过删除对象释放内存)
NameError 尝试访问一个不存在的变量
NotImplementedError 尚未实现的方法
OSError 操作系统产生的异常(例如打开一个不存在的文件)
OverflowError 数值运算超出最大限制
ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError 一般的运行时错误
StopIteration 迭代器没有更多的值
SyntaxError Python的语法错误
IndentationError 缩进错误
TabError Tab和空格混合使用
SystemError Python编译器系统错误
SystemExit Python编译器进程被关闭
TypeError 不同类型间的无效操作
UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
UnicodeError Unicode相关的错误(ValueError的子类)
UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
ValueError 传入无效的参数
ZeroDivisionError 除数为零


TypeError:类型错误


不同类型间的操作出现的错误


1 + '1'


TypeError: unsupported operand type(s) for +: 'int' and 'str'


例2


age = input('请输入你的年龄')
if age >= 18:
    print('成年人...')



SyntaxError:语法错误


print'zdb'


SyntaxError: invalid syntax


IndexError: 索引错误


索引超出序列的范围


my_list = [1, 2, 3]   # 这里是0到2的索引
my_list[3]


IndexError: list index out of range


NameError :尝试访问一个不存在的变量


fishc


NameError: name 'fishc' is not defined


AssertionError :断言语句(assert)失败


my_list = ['zdb']
assert len(my_list) > 0
my_list.pop()         #列表只有一个元素,删除了就为0
assert len(my_list) > 0


Traceback (most recent call last):
  File "C:/Users/zdb/PycharmProjects/untitled/temp.py", line 4, in <module>
    assert len(my_list) > 0
AssertionError


AttributeError :尝试访问未知的对象属性


my_list = ['zdb']
assert len(my_list) > 0
my_list.fishc     #fishc不知道是什么,访问失败


AttributeError: 'list' object has no attribute 'fishc'


KeyError 字典中查找一个不存在的关键字


my_dict = {'one':1, 'two':2, 'three':3}
my_dict['one']
my_dict['four']


KeyError: 'four'


不报错解决方法: get()


my_dict = {'one':1, 'two':2, 'three':3}
print(my_dict.get('four'))


None


ZeroDivisionError :除数为零


5 / 0


ZeroDivisionError: division by zero


12.2 处理异常:try-- except


例:代码出错,程序终止


f = open('我为什么是一个文件.txt')    #没有这个文件
print(f.read())       #输出文件里面的内容
f.close()             #关闭文件


FileNotFoundError: [Errno 2] No such file or directory: '我为什么是一个文件.txt'


为了解决上述代码终止运行的问题,这里进行异常处理


try—except


try:
    f = open('我为什么是一个文件.txt')
    print(f.read())
    f.close()
except OSError:    # 如果上面代码出现这个异常
    print('文件出错了')


文件出错了


try–except----except—except…


如果可能出现多个异常,可以使用多个except



例:



try—except ----as —


try:
    f = open('我为什么是一个文件.txt')
    print(f.read())
    f.close()
except OSError as reason:   # 出现这个异常,执行下面语句
    print('文件出错了\n错误的原因是:' + str(reason))


文件出错了
错误的原因是:[Errno 2] No such file or directory: '我为什么是一个文件.txt'



try:
    sum = 1+'1'
except TypeError as reason:
    print('类型出错了\n错误的原因是:' + str(reason))


类型出错了
错误的原因是:unsupported operand type(s) for +: 'int' and 'str'


try----except----else—


try:
    int('123')
except ValueError as reason:
    print('出错了!' + str(raeson))   # 出现valueerror异常输出这个
else:
    print('没有任何异常!')           #没有异常输出这句


没有任何异常!


try----except----else----finally


finally后面的语句是无论try里面的代码出不出错都会执行的


try:
    f = open('data.txt', 'w')     #写入的方式打开
    for each_line in f:
        print(each_line)          #输出内容
except OSError as reason:
    print('出错了:' + str(reason))
finally:                        #finally定会执行
    f.close()


出错了:not readable


例2


try:
    with open('data.txt', 'w') as f:    #相当于f=open()
        for each_line in f:
            print(each_line)
except OSError as reason:              #打开一个不存在的文件
    print('出错了:' + str(reason))
finally:
    f.close()


出错了:not readable


12.3 创建异常类型:raise语句


raise ZeroDivisionError('除数为零的异常')


raise ZeroDivisionError('除数为零的异常')
ZeroDivisionError: 除数为零的异常



def triangle(a, b, c):
    if (a+b<=c)|(a+c<=b)|(b+c<=a):
        raise Exception('不满足两边之和大于第三边!')
    else:
        print('是三角形!')
try:
    triangle(1,2,3)
except Exception as error:
    print('错误:' + str(error))


错误:不满足两边之和大于第三边!


12.4 断言:assert


  • 断言是一个完整性的检查,确保代码没有做什么明显错误的事情。这些完整的检查由assert语句执行。如果检查失败,就会抛出异常。


assert语句包含以下部分:


  • assert关键字


  • 条件(即求值为True或False的表达式)


  • 逗号


  • 当条件为False时显示的字符串


assert 3<4, '正确'
assert 3>4, '错误'



12.5 存储数据:json.dump()和json.load()


  • 模块json让你能够将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。还可以在python程序之间分享数据,在其它语言之间也能分享。


1、函数json.dump()接受两个参数:要存储的数据、存储数据的文件对象。


import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:   #写入的方式打开,用f_obj表示
    json.dump(numbers,f_obj)        #两个参数,存储的数据,文件对象



2、使用json.load()将这个列表读取到内存中


import json
filename = 'numbers.json'
with open(filename) as f_obj:   #写入的方式打开,用f_obj表示
    numbers = json.load(f_obj)
    print(numbers)



第十三章 os模块和os.path模块


13.1 os模块介绍


OS:Operating System 操作系统


  • 1、os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。


  • 2、os模块与os.path模块用于对目录或文件进行操作


例:打开记事本


执行代码就自动打开


# 打开记事本
import os
os.system('notepad.exe')



和Win+R再输入notepad再回车,结果一样


例:打开计算器


# 打开计算器
import os
os.system('calc.exe')



例:启动QQ


# 直接调用可执行文件
# 启动QQ
import os
os.startfile('D:\\Program Files\\Tencent\\QQ\\Bin\\qq.exe')



13.2 os模块操作目录相关函数


函数名 使用方法
getcwd() 返回当前工作目录
listdir(path) 返回指定路径下的文件和目录信息
mkdir(path[,mode]) 创建单层目录,如该目录已存在抛出异常
makedirs(path) 递归创建多层目录,如该目录已存在抛出异常,注意:'E:\a\b’和’E:\a\c’并不会冲突
rmdir(path) 删除单层目录,如该目录非空则抛出异常
removedirs(path1/path2…) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
chdir(path) 将path设置为当前工作目录
remove(path) 删除文件
rename(old, new) 将文件old重命名为new
system(command) 运行系统的shell命令
walk(top) 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])
以下是支持路径操作中常用到的一些定义,支持所有平台
os.curdir 指代当前目录(‘.’)
os.pardir 指代上一级目录(‘…’)
os.sep 输出操作系统特定的路径分隔符(Win下为’\‘,Linux下为’/')
os.linesep 当前平台使用的行终止符(Win下为’\r\n’,Linux下为’\n’
os.name 指代当前使用的操作系统(包括:‘posix’, ‘nt’, ‘mac’, ‘os2’, ‘ce’, ‘java’)


os.getcwd():获取当前工作目录


import os
print(os.getcwd())


C:\Users\zdb\PycharmProjects\untitled


os.chdir()设置设置当前工作目录


os.listdir()列举指定目录中的文件名


(’.‘表示当前目录,’…'表示上一级目录)


import os
print(os.getcwd())    #获取当前工作目录
os.chdir('E:\\')      #改变工作目录
print(os.getcwd())
print(os.listdir('E:\\'))   #把目录中的所有文件列举出来


C:\Users\zdb\PycharmProjects\untitled
E:\
['$RECYCLE.BIN', 'abc.txt', 'BaiduNetdiskDownload', 'DTLFolder', 'QLDownload', 'qqpcmgr_docpro', 'qycache', 'shuzizhong', 'System Volume Information', 'text.txt', 'WanyxGames', 'work', 'Youku Files', '江西理工大学-Ver6.0.0(20170419)Windows(通用版).exe']


mkdir(path) :创建单层目录,如该目录已存在抛出异常


os.mkdir('E:\\A')           #E潘中创建文件夹A
os.mkdir('E:\\A\\B')        #A里面建立B



makedirs(path):创建多级目录


### makedirs(path)
创建多级目录



remove(path) :删除文件


os.remove('E:\\A\\B\\text.txt')   #删除text.txt


rmdir(path):删除单层目录,如该目录非空则抛出异常


os.rmdir('E:\\A\\B')          #删除B


rmmovedirs(path):删除多级目录


import os
os.removedirs('A/B/C')


os.curdir 指代当前目录(’.’)


import os
print(os.curdir)               #显示当前目录
print(os.listdir(os.curdir))   #显示上一级目录


.
['.idea', 'A_1.txt', 'A_2.txt', 'A_3.txt', 'B_1.txt', 'B_2.txt', 'B_3.txt', 'temp.py', 'venv']


13.3 os.path模块操作目录相关函数


函数名 使用方法
abspath(path) 用于获取文件或目录的绝对路径
exists(path) 判断指定路径(目录或文件)是否存在,存在返回True
join(path, name) 将目录与目录或者文件名拼接起来
splitext(path) 分离文件名与扩展名,返回(f_name, f_extension)元组
basename(path) 从一个目录中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdir(path) 同于判断是否为路径
split(path) 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在
getsize(file) 返回指定文件的尺寸,单位是字节
getatime(file) 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getctime(file) 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getmtime(file) 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
以下为函数返回 True 或 False
isabs(path) 判断指定路径是否为绝对路径
isfile(path) 判断指定路径是否存在且是一个文件
islink(path) 判断指定路径是否存在且是一个符号链接
ismount(path) 判断指定路径是否存在且是一个挂载点
samefile(path1, paht2) 判断path1和path2两个路径是否指向同一个文件


os.path.relpath(patj, start):返回从start到path的相对路径的字符串


os.path.abspath():返回文件的绝对路径


import os.path
print(os.path.abspath('temp.py'))


C:\Users\zdb\PycharmProjects\untitled\temp.py


os.path.exists(path):判断文件是否存在


# 判断文件是否存在,存在为True
import os.path
print(os.path.exists('temp.py'), os.path.exists('111.py'))


True False


os.path.join() :合成路径


import os.path
print(os.path.join('E:\\Python', 'temp.py'))


E:\Python\temp.py


例2


import os
print(os.path.join('A','B','C'))                  #合成工作路径名
print(os.path.join('C:','A','B','C'))
print(os.path.join('C:\\','A','B','C'))


A\B\C
C:A\B\C
C:\A\B\C


basename(path) :去掉目录路径,单独返回文件名


import os
print(os.path.basename('E:\\A\\B\\C\\abc.avi'))   #只显示文件名


abc.avi


dirname(path) :去掉文件名,单独返回目录路径


import os
print(os.path.dirname('E:\\A\\B\\C\\abc.avi'))    #只显示工作路径


E:\A\B\C


os.path.split(path)分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在


import os
print(os.path.split('E\\A\\abc.avi'))   #分割文件名与路径
print(os.path.split('E\\A\\B'))         #将最后一个目录作为文件名分割下来


('E\\A', 'abc.avi')
('E\\A', 'B')


splitext(path) :分离文件名与扩展名,返回(f_name, f_extension)元组


import os
print(os.path.splitext('E\\A\\abc.avi'))   #分离文件名与文件后缀


('E\\A\\abc', '.avi')


ismount(path) :判断指定路径是否存在且是一个挂载点


import os
print(os.path.ismount('E:\\'))
print(os.path.ismount('E:\\A'))


True
False


课堂案例


例:获取当前目录里的所有.py文件


import os
path = os.getcwd()        # 获取当前工作目录
lst = os.listdir(path)    # 列举当前目录的所有文件,放在列表中
for filename in lst:      # 遍历列表中的所有文件
    if filename.endswith('.py'):  # 如果是.py文件
        print(filename)      # 就输出


alien_invasion.py
all_events.py
ball.py
car.py
electric_car.py
game_functions.py
glass.py
main.py
name_function.py
pizza.py
settings.py
survey.py
temp.py


13.4 os.path.getatime() 、os.path.getctime()、os.path.getmtime()


os.path.getatime(file) :访问时间


  • 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)


oa.path.getctime(file):创建时间


  • 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)


oa.path.getmtime(file) :修改时间


  • 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)


import os
print(os.path.getatime('E:\\abc.txt'))   #返回访问时间
print(os.path.getctime('E:\\abc.txt'))   #返回创建时间
print(os.path.getmtime('E:\\abc.txt'))   #返回修改时间


1591704113.4222739
1591704113.4222739
1591704113.4222739


用time模块的gmtime()或localtime()函数换算


import time
import os
print(time.gmtime(os.path.getatime('E:\\abc.txt')))
print(time.localtime(os.path.getmtime('E:\\abc.txt')))


time.struct_time(tm_year=2020, tm_mon=6, tm_mday=9, tm_hour=12, tm_min=19, tm_sec=41, tm_wday=1, tm_yday=161, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=6, tm_mday=9, tm_hour=20, tm_min=19, tm_sec=41, tm_wday=1, tm_yday=161, tm_isdst=0)



相关文章
|
21小时前
|
网络协议 网络架构 Python
Python 网络编程基础:套接字(Sockets)入门与实践
【5月更文挑战第18天】Python网络编程中的套接字是程序间通信的基础,分为TCP和UDP。TCP套接字涉及创建服务器套接字、绑定地址和端口、监听、接受连接及数据交换。UDP套接字则无连接状态。示例展示了TCP服务器和客户端如何使用套接字通信。注意选择唯一地址和端口,处理异常以确保健壮性。学习套接字可为构建网络应用打下基础。
17 7
|
1天前
|
Python
10个python入门小游戏,零基础打通关,就能掌握编程基础_python编写的入门简单小游戏
10个python入门小游戏,零基础打通关,就能掌握编程基础_python编写的入门简单小游戏
|
4天前
|
Python 索引 C语言
Python3从零基础到入门(2)—— 运算符-3
Python3从零基础到入门(2)—— 运算符
|
4天前
|
Python
Python3从零基础到入门(2)—— 运算符-2
Python3从零基础到入门(2)—— 运算符
Python3从零基础到入门(2)—— 运算符-2
|
4天前
|
Python C语言 存储
Python3从零基础到入门(2)—— 运算符-1
Python3从零基础到入门(2)—— 运算符
Python3从零基础到入门(2)—— 运算符-1
|
4天前
|
存储 C语言 Python
|
4天前
|
Python Windows
|
4天前
|
NoSQL 测试技术 API
Python 入门指南(七)(4)
Python 入门指南(七)
9 0
|
4天前
|
测试技术 程序员 数据库
Python 入门指南(七)(3)
Python 入门指南(七)
7 0
|
4天前
|
存储 设计模式 程序员
Python 入门指南(七)(2)
Python 入门指南(七)
9 1