• 【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:projectclass23Day04_2020_02_22python23_04day_task.py","r",encoding="utf8") as f:
        data = f.read()
        print(data)
    
    # 电脑放在别的电脑还可以继续使用,需要用到OS模块
    f_path = "D:projectclass23Day04_2020_02_22python23_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:projectclass23"))
    
    # 创建文件夹
    os.mkdir("python666")
    
    # 删除文件夹
    os.rmdir("python666")
    
    # 判断是否是文件
    res = os.path.isfile("D:projectclass23Day09_2020_02_28python23_09day_task.py")
    print(res)
    # 判断是否是目录
    res2 = os.path.isdir("D:projectclass23Day09_2020_02_28python23_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(重点掌握)

      所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当没打算自此类。

    • BufferError

      当与 缓冲区 相关的操作无法执行时将被引发。

    • LookupError

      此基类用于派生当映射或序列所使用的键或索引无效时引发的异常: IndexErrorKeyError

    内置异常的层次结构

    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           与资源使用相关的警告的基类。

    如何根据错误的信息寻找代码错误的根源:
    从下往上依次排查异常发生的位置、类型、原因

     


  • 相关阅读:
    Fibonacci Again 分类: HDU 2015-06-26 11:05 13人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-完美素数 分类: 比赛 2015-06-26 10:36 15人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-经济节约 分类: 比赛 2015-06-26 10:34 19人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-字符的变化 分类: 比赛 2015-06-26 10:32 46人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-飞花的鱼塘 分类: 比赛 2015-06-26 10:30 43人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-飞花的线代 分类: 比赛 2015-06-26 10:29 10人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-飞花的糖果 分类: 比赛 2015-06-26 10:27 15人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-最大收益问题 分类: 比赛 2015-06-26 10:25 51人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-学区房问题 分类: 比赛 2015-06-26 10:23 89人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/python-test001/p/12378290.html
Copyright © 2020-2023  润新知