【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)
import os
"""
通过文件的路径去打开文件
相对路径:相对当前的工作路径去定位文件位置
.:代表当前路径
..:代表上一级路径(父级路径)
绝对路径:相对于电脑的根目录来进行定位
绝对路径:相对于电脑的根目录来进行定位(windows下面就是根目录)
电脑放在别的电脑还可以继续使用,需要用到OS模块
通过OS模块处理绝对路径
通过OS模块构造文件的绝对路径
os.path.dirname:获取路径的父级目录
os.path.join方法:做路径拼接 os其他方法:
os.getcwd() 显示当前的工作路径
os.chdir() 切换工作路径
os.mkdir() 删掉一个目录
os.listdir() 获取当前路径下的目录列表,返回列表格式数据
os.path.isdir() 判断当前文件是否是目录,返回布尔值
os.path.isfile() 判断当前文件是否是文件,返回布尔值 魔法变量
__file__:代表当前文件在电脑中的绝对路径
__name__:所在模块(文件)的模块名,(如果是在程序启动文件中的话,那么值__main__)
"""
# 相对路径
with open("../nmb_2020_02_19.py","r",encoding="utf8") as f:
data = f.read()
print(data) # 绝对路径
with open("D:\project\class23\Day04_2020_02_22\python23_04day_task.py","r",encoding="utf8") as f:
data = f.read()
print(data) # 电脑放在别的电脑还可以继续使用,需要用到OS模块
f_path = "D:\project\class23\Day04_2020_02_22\python23_04day_task.py" with open(f_path,"r",encoding="utf8") as f:
f.read() # 通过OS模块构造文件的绝对路径
# os.path.dirname:获取路径的父级目录
res = os.path.dirname(f_path)
print(res) # 魔法变量
# __file__:代表当前文件在电脑中的绝对路径
print(__file__)
res = os.path.dirname(__file__)
# 直到找到项目的绝对路径为止:base_dir
base_dir = os.path.dirname(res)
print(base_dir) # 字符串拼接,不推荐使用,linux和windows不兼容
f2 = base_dir + "\\" +"Day04_2020_02_22" + "\\"+ "python23_04day_task.py"
print(f2) # os.path.join方法:做路径拼接
file_path = os.path.join(base_dir,"Day04_2020_02_22","python23_04day_task.py")
print(file_path) with open(file_path,"r",encoding="utf8") as f:
f.read() # 查看当前的工作路径
# 工作路径和文件路径是不一样的
print(os.getcwd())
# 切换工作路径到父级目录
os.chdir("..") print(os.getcwd())
# 切换回来
os.chdir("Day09_2020_02_28")
print(os.getcwd()) # 获取当前工作路径下所有的文件和目录
print(os.listdir("D:\project\class23")) # 创建文件夹
os.mkdir("python666") # 删除文件夹
os.rmdir("python666") # 判断是否是文件
res = os.path.isfile("D:\project\class23\Day09_2020_02_28\python23_09day_task.py")
print(res)
# 判断是否是目录
res2 = os.path.isdir("D:\project\class23\Day09_2020_02_28\python23_09day_task.py")
print(res2) """
python中常见的异常
变量没定义:
NameError:name 'a' is not defined
语法错误:
SyntaxError:invalid syntax
键不存在:
KeyError:'age'
没找到模块:不要和python内置模块(os、random)、第三方模块重名(requests)、包重名,不然会报错
ModuleNotFoundError: No module named 'requet'
类型错误:
TypeError: can only concatenate str (not "int") to str 异常分析:
异常类型介绍
BaseException: 所有异常类型的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
GeneratorExit 生成器(generator)发生异常来通知退出
Exception 常规错误的基类 错误原因:一行一行往上找,增加自己解决问题的能力,慢慢积累 发生异常程序还要继续运行怎么办?
异常捕获:
try:
except:
else:
finally:
"""
# 避免异常终端程序运行:异常捕获
a = 100
try:
print(a + "abc")
except:
pass
print("python23") # 把不确认会不会报错的代码,方法放在try里面
try:
with open("ttt.txt","r") as f:
f.read()
except:
# 捕获到了异常
print("打开的文件不存在")
with open("ttt.txt","w") as f:
pass
# 指定捕获异常的类型,异常捕获不能捕获语法错误
a = 100
try:
print(a + "abc")
# except后面可以写异常类型(指定只捕获这个类型的错误)指定捕获的类型
# as可以捕获到异常提示的信息,e接收错误信息
# 方式一:
except TypeError as e:
print("捕获到了类型异常")
print(e)
except NameError:
print("捕获到了变量没有被定义的异常")
print("python23") # 方式二:except指定捕获多个异常类型
try:
print(a + "abc")
# except后面可以写异常类型(指定只捕获这个类型的错误)
except (TypeError,NameError,KeyError) as e:
print("捕获到了类型异常")
print(e)
# 捕获所有类型的异常(语法错误除外)
a = 100
try:
# f = open("ttt.txt")
aa = 10000
# print(a + "abc")
# Exception可以捕获除了语法错误的所有错误类型
except Exception as e:
print("捕获到了类型异常")
print(e)
else:
# try里面没有捕获到(发生)异常,那么就会执行else里面的代码
print("没有捕获到异常")
finally:
# f.close()
# try里面的代码不管是否发生异常,都会执行
print("-----finally-----")
内置异常基类
在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例。 通过子类化创建的两个不相关异常类永远是不等效的,既使它们具有相同的名称。
下列异常主要被用作其他异常的基类。
BaseException: 所有异常的基类
Exception(重点掌握)
所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当没打算自此类。
ArithmeticError
此基类用于派生针对各种算术类错误而引发的内置异常:
OverflowError,ZeroDivisionError,FloatingPointError。
BufferError
当与 缓冲区 相关的操作无法执行时将被引发。
LookupError
此基类用于派生当映射或序列所使用的键或索引无效时引发的异常:
IndexError,KeyError
内置异常的层次结构
BaseException 所有异常的基类
+-- SystemExit 解释器请求退出
+-- KeyboardInterrupt 用户中断执行(通常是输入^C)
+-- GeneratorExit 生成器(generator)发生异常来通知退出
+-- Exception 常规错误的基类
+-- StopIteration 迭代器没有更多值
+-- StopAsyncIteration 必须通过异步迭代器对象的__anext__()方法引发以停止迭代
+-- ArithmeticError 所有数值计算错误的基类
| +-- FloatingPointError 浮点计算错误
| +-- OverflowError 数值运算超出最大限制
| +-- ZeroDivisionError 除(或取模)零 (所有数据类型
+-- AssertionError 断言语句失败
+-- AttributeError 对象没有这个属性
+-- BufferError 与缓冲区相关的操作时引发
+-- EOFError 没有内建输入,到达EOF 标记
+-- ImportError 导入失败
| +-- ModuleNotFoundError 找不到模块
+-- LookupError 无效数据查询的基类
| +-- IndexError 序列中没有此索引(index)
| +-- KeyError 映射中没有这个键
+-- MemoryError 内存溢出错误
+-- NameError 未声明、初始化对象
| +-- UnboundLocalError 访问未初始化的本地变量
+-- OSError 操作系统错误,
| +-- BlockingIOError 操作将阻塞对象设置为非阻塞操作
| +-- ChildProcessError 子进程上的操作失败
| +-- ConnectionError 与连接相关的异常的基类
| | +-- BrokenPipeError 在已关闭写入的套接字上写入
| | +-- ConnectionAbortedError 连接尝试被对等方中止
| | +-- ConnectionRefusedError 连接尝试被对等方拒绝
| | +-- ConnectionResetError 连接由对等方重置
| +-- FileExistsError 创建已存在的文件或目录
| +-- FileNotFoundError 请求不存在的文件或目录
| +-- InterruptedError 系统调用被输入信号中断
| +-- IsADirectoryError 在目录上请求文件操作
| +-- NotADirectoryError 在不是目录的事物上请求目录操作
| +-- PermissionError 在没有访问权限的情况下运行操作
| +-- ProcessLookupError 进程不存在
| +-- TimeoutError 系统函数在系统级别超时
+-- ReferenceError 弱引用试图访问已经垃圾回收了的对象
+-- RuntimeError 一般的运行时错误
| +-- NotImplementedError 尚未实现的方法
| +-- RecursionError 解释器检测到超出最大递归深度
+-- SyntaxError Python 语法错误
| +-- IndentationError 缩进错误
| +-- TabError Tab 和空格混用
+-- SystemError 一般的解释器系统错误
+-- TypeError 对类型无效的操作
+-- ValueError 传入无效的参数
| +-- UnicodeError Unicode 相关的错误
| +-- UnicodeDecodeError Unicode 解码时的错误
| +-- UnicodeEncodeError Unicode 编码时错误
| +-- UnicodeTranslateError Unicode 转换时错误
+-- Warning 警告的基类
+-- DeprecationWarning 关于被弃用的特征的警告
+-- PendingDeprecationWarning 关于构造将来语义会有改变的警告
+-- RuntimeWarning 可疑的运行行为的警告
+-- SyntaxWarning 可疑的语法的警告
+-- UserWarning 用户代码生成的警告
+-- FutureWarning 有关已弃用功能的警告的基类
+-- ImportWarning 模块导入时可能出错的警告的基类
+-- UnicodeWarning 与Unicode相关的警告的基类
+-- BytesWarning bytes和bytearray相关的警告的基类
+-- ResourceWarning 与资源使用相关的警告的基类。 如何根据错误的信息寻找代码错误的根源:
从下往上依次排查异常发生的位置、类型、原因

【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)的更多相关文章
- Python基础入门-os模块
今天我们来介绍一下os模块中常用的一些方法,当然python中的os模块中提供的使用方法有很多,但是这里面小编会列举出来一些和实际工作中应用的相关的方法,而且会有一些实际的例子方便大家对os模块理解. ...
- python基础之os模块操作
# os模块 目录相关内置库import os# . 当前目录 .. 返回上一级目录# 1. os.path.abspath() --获取当前文件的绝对路径(不包含os模块.py) pwd# path ...
- Python基础(os模块)
os模块用于操作系统级别的操作: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当 ...
- [Python基础]009.os模块(1)
os模块(1) 介绍 os 常量 文件目录操作 文件属性操作 遍历文件夹 介绍 os模块是系统服务应用程序接口,是Python最常用的模块之一. os模块包含了对文件和文件夹的操作,操作系统相关的操作 ...
- python 基础(八) os模块
OS模块 概念:包含了普遍的操作 系统的功能 一.函数 函数名 函数说明 os.name 获取操作系统类型 nt->Windows posix->Linux/Unix os.listdir ...
- [Python基础]010.os模块(2)
os模块(2) 介绍 os 常量 路径 判断路径属性 路径变换 文件属性 相同文件 介绍 - os.path模块,主要处理路径操作,包含了各种处理文件和文件名的方法. os.path 常量 os.pa ...
- python基础之函数式编程、匿名函数、内置函数
一 函数式编程 不修改外部状态. 模仿数学里得函数进行编程. 用函数编程写出得代码相当精简. 可读性比较差. 例子: y=2*x+1 x=1 def test(x): return 2*x+1 tes ...
- 【python基础语法】模块和包管理,文件的操作(第8天课堂笔记)
''' 模块和包管理 模块和包的定义: 模块:模块是一个Python文件,以.py结尾,包含了Python对象定义和Python语句 包:Python中的包就是一个包含__init__.py文件的目录 ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
随机推荐
- Commvault逻辑架构及组件说明
在学习和使用Commvault软件的过程中,经常会碰到一些术语和缩写,初学者可能并不是很清楚这些术语和缩写的具体含义,接下来我们梳理一下Commvault软件中这些属于和缩写的含义,有可能一次不能梳理 ...
- swoole(PHP异步网络通信引擎)的结构和运行流程
swoole结构说明和运行流程 主要分为三个部分: 1.Master:swoole的主进程 处理swoole核心的事件驱动, 它包含多个线程(蓝色Reactor), 所有事件的监听都在Reactor实 ...
- AOP编程实践总结
AOP编程实践总结 AOP概述 AOP(Aspect-Oriented Programming,面向方面编程)是OOP(Object-Oriented Programing,面向对象编程)的补充和完善 ...
- Maven 项目无法在Ecplise加进tomcat server
当把用Maven项目 加进 tomcat server 时,出现 "There are no resources that can be added or removed from the ...
- TCP UDP协议的三次握手
接触网络协议栈TCP/IP的人,就一定绕不开的一个话题就是TCP的三次握手.下面我将简单介绍一下. 三次握手流程的本质,可以这么理解:TCP的三次握手其实是双方各一次握手,各一次确认,只是其中一次握手 ...
- 2020 University Rankings US News(亚洲)
2020 University Rankings US News(亚洲)
- Magicodes.IE 2.0发布
Magicodes.IE 2.0发布 Magicodes.IE是我们维护的开源的导入导出通用库,去年年底已加入NCC开源组织. Github地址:https://github.com/xin-lai/ ...
- js代码预解析
1.var一般用于声明变量,预解析代码的时候,等号后面的赋值过程不会执行,所以预解析时的var变量都是未定义的 2.function声明的函数,预解析的时候,值就是函数里面的内容 例:console. ...
- css: line-height 与box-sizing
css 1.line-hight: 行高line-height,是文本行基线这件的距离,不是字体大小,它确定了各个元素框的高度增加或减少多少. 对于块级元素:定义了元素中文本基线之间的最小距离. li ...
- HDU_3853_区间dp
http://acm.hdu.edu.cn/showproblem.php?pid=3853 dp[i][j]表示由空白串刷成b的从i到j位所需要的最小次数. 然后在比较a和b的每一位,再次更新dp表 ...