Python----异常处理、断言和路径处理,简单、清晰版

打印 上一主题 下一主题

主题 552|帖子 552|积分 1656

1.路径处理

1.找模块:sys.path
  1. import sys
  2. print(sys.path)
复制代码
 

- 1.理解
  1.   - 1.是python去查找包或模块
  2.   - 2.项目开始根目录,python内置的目录
  3.   - 3.虽然说python的安装目录下也可以存放我们写的模块,但是不建议(太多了,不大好找)
  4.   - 4.如果以后你发现模块导入不了了 ,可以使用下sys.path
  5.   - 5.返回的是一个数组
  6.   - 6.用的时候需要导入sys:import sys
  7.   - python的目录,主要放外部的库,或者第三方的模块
复制代码
 
- 2.两种导包的方法再去找
  1. python学习交流Q群:903971231####
  2.   - 1.from..module ...import 方法、变量等
  3.     - from python_basic.class10_路径.pac01.module_012 import a
  4. print(a)
  5. print(sys.path)
  6.   - 2.from pac ... import module
  7.     - from python_basic.class10_路径.pac01 import module_012
  8. print(module_012.a)
  9. print(sys.path)
复制代码
 

2.获取文件的路径


    1. 1.获取绝对路径os.path.abspath(file)
    2.   - import os
    3. # 获取绝对路径
    4. # 固定的写法
    5. # file 表示运行的文件的名称
    6. abs_path=os.path.abspath(file)
    7. print(abs_path)
    8. import os
    9. # 当前文件的绝对路径
    10. abs_path=os.path.abspath(__file__)
    11. print(abs_path)
    复制代码
     
- 2.获取文件的目录路径
  1. - 1.os.path.dirname(file)
  2.     - 不建议用
  3. # 获取文件的目录
  4. dir_name = os.path.dirname(__file__)
  5. print(dir_name)
复制代码
 

- 2.os.path.dirname(abs_path)
  1. - 建议用
  2.   - dir_name1 =os.path.dirname(file)
  3. dir_name =os.path.dirname(abs_path)
  4. abs_path =os.path.abspath(__file__)
  5. dir_name =os.path.dirname(abs_path)
  6. 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一般来说,是通过某个文件去获取项目的跟路径



  1. abs_path = os.path.abspath(__file__)
  2. dir_name =os.path.dirname(abs_path)
  3. txt_file_path=os.path.join(dir_name,"pac01","demo006.txt")
  4. with open(txt_file_path,encoding="utf-8") as f:
  5.     print(f.readlines())
复制代码
 
  1.   - 2.其他方法:不建议用
复制代码
  1. python学习交流Q群:903971231###
  2.        - # print(dir_name+'/pac01/demo.txt')
  3. # print(dir_name+r'\pac01\demo.txt')
  4.         - 这种写法不建议,因为不同的系统,windows一般是\,mac是/,改来改去麻烦
  5.     - 4.打开文件并读取
  6.       - with open(txt_file_path,encoding="utf8") as f:
  7.   print(f.read())
  8. PS:获取文件路径时,路径或文件不一定要真实存在,了解这即可
复制代码
 
3.工作目录


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

    • 1.你在哪个目录下运行python程序,输出的是哪个路径

  1. print(os.getcwd())
复制代码
 


  • 2.os.chdir():切换工作目录
  • 3.os.mkdir(“test_dir”)

    • 创建工作目录
    • os.mkdir(“test_dir”)

  • 4.os.rmdir()

    • 删除工作目录
    • os.rmdir(“test_dir”)

  • 5.listdir()

    • 获取当前路径下的目录列表,返回列表格式数据


  1. print(os.listdir())
复制代码
 


  • 6.os.path.isfile()

    • 判断当前文件是否是文件,返回布尔值

  • 7.os.path.isdir

    • 判断当前文件是否是目录,返回布尔值

  1. print(os.path.isfile(__file__))
  2. print(os.path.isdir(__file__))
复制代码
 

2.异常处理

1.异常理解


  • 1.程序如果遇到异常,不会再执行
  • 2.写代码的人不能让程序遇到异常就终止运行

    • 1.捕获他catch

      • 改变程序遇到异常的行为,异常处理,希望程序不要终止,按照我说的办,叫做异常的捕获

    • 2.抛出他raise

2.异常处理


  • 1.异常的捕获

    • 1.基本的写法:

try:
你要执行的可能发生异常的代码
except:
程序发生异常后,你希望程序做的事情
  1. - 1.程序先执行try 当中的代码
  2. - 2.但是一旦try当中某个代码报错,会执行跳到except,try剩下的代码不会执行
  3. - 3.例子:
  4.   - 1.except捕获了
  5. try:
  6.     print("正在运行代码")
  7.     a = 1 / 0
  8.     print(f"计算结果:{a}")
  9. except:
  10.     print("1不能除0,你需要改除数")
  11. print("其他的程序")
复制代码
 
输出的结果是:

  1. “”"
  2.   - 2.异常类型的捕获
  3.     - 1.没有捕获该类型的情况
  4.       - # try:
  5. try:
  6.   print("正在运行代码")
  7.   a=1/0
  8.   print(f"计算结果:{a}")
  9. except IndexError:
  10.   print("1不能除0,你需要改除数")
  11. print("其他的程序")
  12. # 只会打印 正在运行代码,因为报错了,无法捕获ZeroDivisionError异常,
复制代码
 
  1. - 2.捕获到该类型的错误
复制代码
  1. try:
  2.   print("正在运行代码")
  3.   a=1/0
  4.   print(f"计算结果:{a}")
  5. except ZeroDivisionError:
  6.   print("1不能除0,你需要改除数")
  7. print("其他的程序")
复制代码
 
输出的结果是:


  • 3.打印异常信息Exception(或某种类型的报错) as e
    1. - 1.单个异常的
    2.   - # 打印异常信息,一般用此方法
    3. try:
    4.   print("正在运行代码")
    5.   a=1/0
    6.   print(f"计算结果:{a}")
    7. except ZeroDivisionError as e:
    8.   print(e)
    9. print("其他的程序")
    复制代码
     
输出的结果是:

  1.     - 2.多个异常的
复制代码
  1. try:
  2.   lst = ['yz', 'addd']
  3.   lst[3]
  4.   a=1/0
  5. except ZeroDivisionError as err:
  6.   print(err)
  7.   print("hello word")
  8. # IndexError: list index out of range
  9.       - # 捕获多个时
复制代码
 
方法1:
  1. try:
  2.   {"name":"zhangsan","age":18}['name1']
  3.   lst = ['yz', 'addd']
  4.   lst[3]
  5.   a=1/0
  6. except (ZeroDivisionError,IndexError,KeyError) as err:
  7.   print(err)
  8.   print("hello word")
复制代码
 
打印的结果:

方法2
  1. try:
  2.   a = 1 / 0
  3. {"name":"zhangsan","age":18}['name1']
  4.   lst = ['yz', 'addd']
  5.   lst[3]
  6. except ZeroDivisionError as err:
  7.   print(err)
  8.   print("ZeroDivisionError")
  9. # 抓到这个异常
  10. # division by zero
  11. # ZeroDivisionError
  12. except IndexError:
  13.   print("IndexError")
  14. # 抓到这个异常 IndexError
  15. except KeyError:
  16.   print("KeyError")
  17. # 抓到这个异常 KeyError
复制代码
 
打印的结果:
  1.       - 具体用哪个,根据实际情况来
复制代码

  • 2.try…finally

    • 1.finally后的代码无论正常与否,都会执行

      • 1.正常的


  1. try:
  2.   1/1
  3.   print("正常执行的代码")
  4. except ZeroDivisionError as e:
  5.   print("不能除以0")
  6. finally:
  7.   print("无论正常与否,都会执行的代码")
复制代码
 
打印的结果:

  1. - 2.异常的
  2. try:
  3.   1/0
  4.   print("正常执行的代码")
  5. except ZeroDivisionError as e:
  6.   print("不能除以0")
  7. finally:
  8.   print("无论正常与否,都会执行的代码")
复制代码
 
打印的结果:
  1. - 2.常见应用在打开文件后,**关闭文件**
复制代码
  1. - # 假设demo.py被打开了
  2. import io
  3. try:
  4.   f=open("demo.py",'a')
  5.   f.read()
  6. except io.UnsupportedOperation as e:
  7.   print("文件读取失败")
  8.   print(e)
  9. finally:
  10.   f.close()
  11. """
复制代码
 
打印结果:
文件读取失败
  1. not readable
  2. “”"
  3. 2.异常的抛出
  4. 例子1:
  5. def adult_add(a,b):
  6.   """两个大于等于18的数相加;小于18的不能相加"""
  7.   if (a<18) or (b<18):
  8.     raise ValueError("参数必须大于或等于18")
  9.   c=a+b
  10.   return c
  11. adult_add(18,19)
  12. adult_add(3,4) #ValueError: 参数必须大于或等于18
  13. print("函数执行完毕")
  14. """
复制代码
 
最后

今天这篇文章到这里就结束了,喜欢的小伙伴记得点赞收藏。关于这篇文章有不懂的地方记得随时提问
哟!!!下次见~~~


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表