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)



目录
相关文章
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。
|
1天前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
Python入门:1.Python介绍
Python是一种功能强大、易于学习和运行的解释型高级语言。由**Guido van Rossum**于1991年创建,Python以其简洁、易读和十分工程化的设计而带来了庞大的用户群体和丰富的应用场景。这个语言在全球范围内都被认为是**创新和效率的重要工具**。
Python入门:1.Python介绍
|
1月前
|
存储 数据挖掘 数据处理
Python Pandas入门:行与列快速上手与优化技巧
Pandas是Python中强大的数据分析库,广泛应用于数据科学和数据分析领域。本文为初学者介绍Pandas的基本操作,包括安装、创建DataFrame、行与列的操作及优化技巧。通过实例讲解如何选择、添加、删除行与列,并提供链式操作、向量化处理、索引优化等高效使用Pandas的建议,帮助用户在实际工作中更便捷地处理数据。
47 2
|
1月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
41 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈

热门文章

最新文章

推荐镜像

更多