1.路径处理
1.找模块:sys.path
import sys
print(sys.path)
– 1.理解
- 1.是python去查找包或模块
- 2.项目开始根目录,python内置的目录
- 3.虽然说python的安装目录下也可以存放我们写的模块,但是不建议(太多了,不大好找)
- 4.如果以后你发现模块导入不了了 ,可以使用下sys.path
- 5.返回的是一个数组
- 6.用的时候需要导入sys:import sys
- python的目录,主要放外部的库,或者第三方的模块
– 2.两种导包的方法再去找
python学习交流Q群:903971231####
- 1.from..module ...import 方法、变量等
- from python_basic.class10_路径.pac01.module_012 import a
print(a)
print(sys.path)
- 2.from pac ... import module
- from python_basic.class10_路径.pac01 import module_012
print(module_012.a)
print(sys.path)
2.获取文件的路径
*
1.获取绝对路径os.path.abspath(file)
- import os
获取绝对路径
固定的写法
file 表示运行的文件的名称
abs_path=os.path.abspath(file)
print(abs_path)
import os
当前文件的绝对路径
abs_path=os.path.abspath(__file__)
print(abs_path)
– 2.获取文件的目录路径
- 1.os.path.dirname(file)
- 不建议用
获取文件的目录
dir_name = os.path.dirname(__file__)
print(dir_name)
– 2.os.path.dirname(abs_path)
- 建议用
- dir_name1 =os.path.dirname(file)
dir_name =os.path.dirname(abs_path)
abs_path =os.path.abspath(__file__)
dir_name =os.path.dirname(abs_path)
print(dir_name)
– 3.应用场景
- 例子:假设若需要打开另外一个包pac01下的demo.txt
- 1.思路
- 1.获取当前文件的绝对路径
- abs_path=os.path.abspath(file)
- 2.获取当前文件的目录路径
- dir_name =os.path.dirname(abs_path)
- 3.当前文件的目录路径和pac01进行拼接
- 1.推荐方法
- txt_file_path=os.path.join(dir_name,”pac01″,”demo.txt”)
- PS一般来说,是通过某个文件去获取项目的跟路径
abs_path = os.path.abspath(__file__)
dir_name =os.path.dirname(abs_path)
txt_file_path=os.path.join(dir_name,"pac01","demo006.txt")
with open(txt_file_path,encoding="utf-8") as f:
print(f.readlines())
- 2.其他方法:不建议用
python学习交流Q群:903971231###
- # print(dir_name+'/pac01/demo.txt')
print(dir_name+r'\pac01\demo.txt')
- 这种写法不建议,因为不同的系统,windows一般是\,mac是/,改来改去麻烦
- 4.打开文件并读取
- with open(txt_file_path,encoding="utf8") as f:
print(f.read())
PS:获取文件路径时,路径或文件不一定要真实存在,了解这即可
3.工作目录
- 1.os.getcwd():获取当前的工作目录
- 1.你在哪个目录下运行python程序,输出的是哪个路径
print(os.getcwd())
- 2.os.chdir():切换工作目录
- 3.os.mkdir(“test_dir”)
- 创建工作目录
- os.mkdir(“test_dir”)
- 4.os.rmdir()
- 删除工作目录
- os.rmdir(“test_dir”)
- 5.listdir()
- 获取当前路径下的目录列表,返回列表格式数据
print(os.listdir())
- 6.os.path.isfile()
- 判断当前文件是否是文件,返回布尔值
- 7.os.path.isdir
- 判断当前文件是否是目录,返回布尔值
print(os.path.isfile(__file__))
print(os.path.isdir(__file__))
2.异常处理
1.异常理解
- 1.程序如果遇到异常,不会再执行
- 2.写代码的人不能让程序遇到异常就终止运行
- 1.捕获他catch
- 改变程序遇到异常的行为,异常处理,希望程序不要终止,按照我说的办,叫做异常的捕获
- 2.抛出他raise
2.异常处理
- 1.异常的捕获
- 1.基本的写法:
try:
您要执行的代码可能会导致异常
[En]
The code that you are going to execute that may cause an exception
except:
您希望程序在异常发生后执行的操作
[En]
What you want the program to do after an exception occurs
- 1.程序先执行try 当中的代码
- 2.但是一旦try当中某个代码报错,会执行跳到except,try剩下的代码不会执行
- 3.例子:
- 1.except捕获了
try:
print("正在运行代码")
a = 1 / 0
print(f"计算结果:{a}")
except:
print("1不能除0,你需要改除数")
print("其他的程序")
输出的结果是:
"""
- 2.异常类型的捕获
- 1.没有捕获该类型的情况
- # try:
try:
print("正在运行代码")
a=1/0
print(f"计算结果:{a}")
except IndexError:
print("1不能除0,你需要改除数")
print("其他的程序")
只会打印 正在运行代码,因为报错了,无法捕获ZeroDivisionError异常,
- 2.捕获到该类型的错误
try:
print("正在运行代码")
a=1/0
print(f"计算结果:{a}")
except ZeroDivisionError:
print("1不能除0,你需要改除数")
print("其他的程序")
输出的结果是:
- 3.打印异常信息Exception(或某种类型的报错) as e
- 1.单个异常的
- # 打印异常信息,一般用此方法
try:
print("正在运行代码")
a=1/0
print(f"计算结果:{a}")
except ZeroDivisionError as e:
print(e)
print("其他的程序")
输出的结果是:
- 2.多个异常的
try:
lst = ['yz', 'addd']
lst[3]
a=1/0
except ZeroDivisionError as err:
print(err)
print("hello word")
IndexError: list index out of range
- # 捕获多个时
方法1:
try:
{"name":"zhangsan","age":18}['name1']
lst = ['yz', 'addd']
lst[3]
a=1/0
except (ZeroDivisionError,IndexError,KeyError) as err:
print(err)
print("hello word")
打印的结果:
方法2
try:
a = 1 / 0
{"name":"zhangsan","age":18}['name1']
lst = ['yz', 'addd']
lst[3]
except ZeroDivisionError as err:
print(err)
print("ZeroDivisionError")
抓到这个异常
division by zero
ZeroDivisionError
except IndexError:
print("IndexError")
抓到这个异常 IndexError
except KeyError:
print("KeyError")
抓到这个异常 KeyError
打印的结果:
- 具体用哪个,根据实际情况来
- 2.try…finally
- 1.finally后的代码无论正常与否,都会执行
- 1.正常的
try:
1/1
print("正常执行的代码")
except ZeroDivisionError as e:
print("不能除以0")
finally:
print("无论正常与否,都会执行的代码")
打印的结果:
- 2.异常的
try:
1/0
print("正常执行的代码")
except ZeroDivisionError as e:
print("不能除以0")
finally:
print("无论正常与否,都会执行的代码")
打印的结果:
- 2.常见应用在打开文件后,**关闭文件**
- # 假设demo.py被打开了
import io
try:
f=open("demo.py",'a')
f.read()
except io.UnsupportedOperation as e:
print("文件读取失败")
print(e)
finally:
f.close()
"""
打印结果:
文件读取失败
not readable
"""
2.异常的抛出
例子1:
def adult_add(a,b):
"""两个大于等于18的数相加;小于18的不能相加"""
if (aor (b):
raise ValueError("参数必须大于或等于18")
c=a+b
return c
adult_add(18,19)
adult_add(3,4) #ValueError: 参数必须大于或等于18
print("函数执行完毕")
"""
打印结果:
File ".../demo03_raise.py", line 13, in adult_add
raise ValueError("参数必须大于或等于18")
ValueError: 参数必须大于或等于18
"""
- 2.基于上个例子调用:
- try:
adult_add(3, 4) # ValueError: 参数必须大于或等于18
except:
print("函数执行完毕")
打印结果:函数执行完毕
- 3.可用于断言的场景
3.断言
1.理解
- 1.assert后面跟一个条件语句,条件不成立就触发条件异常
- 2.语法:assert 条件表达式
### 3.例子
- height=int(input("请输入身高:"))
assert height>180
当断言为真时:请输入高度:181<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>When the assertion is true: please enter height: 181</font>*</details>
"""
当断言为假时:请输入高度:180<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>When the assertion is false: please enter height: 180</font>*</details>
Traceback (most recent call last):
File ".../demo04_assert.py", line 9, in
assert height>180
AssertionError
"""
最后
这就是今天这篇文章的结尾。请记住喜欢你最喜欢的朋友。如果您对本文有任何不了解的地方,请随时提问。
[En]
This is the end of this article today. Please remember to like your favorite friends. If you don’t understand anything about this article, please feel free to ask questions.
哟!!!下次见~~~
Original: https://www.cnblogs.com/1234567FENG/p/16406431.html
Author: 蚂蚁爱Python
Title: Python—-异常处理、断言和路径处理,简单、清晰版
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499229/
转载文章受原作者版权保护。转载请注明原作者出处!