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)



目录
相关文章
|
4天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
5天前
|
Python
深入理解Python装饰器:从入门到实践####
本文旨在通过简明扼要的方式,为读者揭开Python装饰器的神秘面纱,从基本概念、工作原理到实际应用场景进行全面解析。不同于常规的摘要仅概述内容概要,本文将直接以一段精炼代码示例开篇,展示装饰器如何优雅地增强函数功能,激发读者探索兴趣,随后深入探讨其背后的机制与高级用法。 ####
33 11
|
2天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
2天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
1天前
|
设计模式 缓存 开发框架
Python中的装饰器:从入门到实践####
本文深入探讨了Python中装饰器的工作原理与应用,通过具体案例展示了如何利用装饰器增强函数功能、提高代码复用性和可读性。读者将学习到装饰器的基本概念、实现方法及其在实际项目开发中的实用技巧。 ####
11 3
|
5天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
2天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
3天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
4天前
|
人工智能 数据挖掘 程序员
Python编程入门:从零到英雄
【10月更文挑战第37天】本文将引导你走进Python编程的世界,无论你是初学者还是有一定基础的开发者,都能从中受益。我们将从最基础的语法开始讲解,逐步深入到更复杂的主题,如数据结构、面向对象编程和网络编程等。通过本文的学习,你将能够编写出自己的Python程序,实现各种功能。让我们一起踏上Python编程之旅吧!
|
5天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。