100_异常

标签: 自学Python笔记  异常  except  自定义异常  traceback

常见内置异常 - python 官方文档

try- 语句陈述 - 官网文档 - 复合语句


异常处理

一些 示例

可以跟着敲一敲

# try + finally 
# it's work
In [1]: try:
   ...:     print("onepis")
   ...: finally:
   ...:     print("end")
   ...:
onepis
end

# try + except + finally 
# it's work
# 报错的时候  执行 except 里面的语句
# finally  不管是否报错 都执行
In [2]: try:
   ...:     raise ValueError("the value is error ")
   ...: except Exception as e:
   ...:     print("error")
   ...: finally:
   ...:     print("end")
   ...:
error
end

# try + except + finally 
# it's work

In [3]: try:
   ...:     raise ValueError("the value is error ")
   ...: except Exception as e:
   ...:     print(e)
   ...: finally:
   ...:     print("end")
   ...:
the value is error
end
# try + except + else +finally 
# it's work
# 报错的时候 else 里面的语句 不执行

In [4]: try:
   ...:     raise ValueError("the value is error ")
   ...: except Exception as e:
   ...:     print(e)
   ...: else:
   ...:     print("else")
   ...: finally:
   ...:     print("end")
   ...:
the value is error
end
# try + except +else + finally 
# it's work
# 没有报错
# 那么else 里面的语句执行
# 则 except 里面的语句 不执行
In [5]: try:
   ...:     #raise ValueError("the value is error ")
   ...:     print("it's ok")
   ...:
   ...: except Exception as e:
   ...:     print(e)
   ...: else:
   ...:     print("else")
   ...: finally:
   ...:     print("end")
   ...:
it's ok
else
end

# try + else + finally 
# 报错  语法错误
In [6]: try:
   ...:     #raise ValueError("the value is error ")
   ...:     print("it's ok")
   ...: else:
   ...:     print("else")
   ...: finally:
   ...:     print("end")
   ...:
  File "<ipython-input-6-03ea4e78e36a>", line 4
    else:
       ^
SyntaxError: invalid syntax

# try + else 
# 报错  语法错误
In [7]: try:
   ...:     #raise ValueError("the value is error ")
   ...:     print("it's ok")
   ...: else:
   ...:     print("else")
   ...:
   ...:
  File "<ipython-input-7-dbe923b370cd>", line 4
    else:
       ^
SyntaxError: invalid syntax

# try + except 
# it's work
In [8]: try:
   ...:     #raise ValueError("the value is error ")
   ...:     print("it's ok")
   ...: except Exception as e:
   ...:     print(e)
   ...:
   ...:
   ...:
it's ok

In [9]: try:
   ...:     raise ValueError("the value is error ")
   ...:     print("it's ok")
   ...: except Exception as e:
   ...:     print(e)
   ...:
   ...:
   ...:
the value is error





traceback 和 异常处理

import traceback
import sys
try:
    raise KeyError
except:
    print(sys.exc_info()) # 这是一个 元组 所以我们 可以 用下标访问
    traceback.print_tb(sys.exc_info()[2])

在这里插入图片描述


tips: 对于新手而言 下面代码 可以多练习。
前面两节 写的 os 模块的很多方法 以及 shutil 都有 使用到。
还有以前写过的 嵌套函数。以及很多老的 知识 。 算是一个回顾。
包括 F-string 以及 循环遍历 if 判断。非常有帮助。

import shutil
import os
import time
import traceback
import sys


def move_files(dir_path, target_path):
    """
    :dir_path: 要移动的文件夹
    :target_path: 移动到那个文件夹
    """
    def loop_move():
        # 嵌套函数
        # 循环遍历 文件
        path_li = os.listdir(dir_path)
        if path_li:
            # 如果列表为空 说明没有文件
            for i in path_li:
                if os.path.splitext(i)[1]:
                    shutil.move(os.path.join(dir_path, i), target_path)
            # 移动文件
            print("++ move complete ++")
            time_end = time.time()
            # 结束时间
            print("move the file of time : ", time_end - time_start, " s")
        else:
            print(f"++ {dir_path} is have not file, complete ++")

    time_start = time.time()  # 开始时间
    if os.path.exists(target_path) and os.path.isdir(target_path):
        # 判断目标文件夹是否存在 和 是否 该目标是否是文件夹
        loop_move()
    else:
        print(f"the dir {target_path} is not exists or not a dir")
        print("ready mkdir")
        try:
            os.mkdir(target_path)
            # 创建 文件夹
        except FileExistsError:
            print(sys.exc_info())
            traceback.print_tb(sys.exc_info()[2])
            print("-" * 20 + "\n")
            # ----------------------------
            print(f"the {target_path} is a file ,not a dir,ready remove")
            os.remove(target_path)
            # 移除文件
            print(f"{target_path} is removed")
            os.mkdir(target_path)
        finally:
            loop_move()

测试自定义异常

我们自己写一个异常类

编写异常类

class AgeError(Exception):  # 继承Exception
    def __init__(self, errorInfo):
        Exception.__init__(self)  # 调用父类构造器
        self.errorInfo = errorInfo

    def __str__(self):
        return str(self.errorInfo)+',年龄错误!!!应该在1-150之间!!!'

测试代码

if __name__ == '__main__':  # 如果为True,则模块是作为独立文件运行,可以执行测试代码!
    age = int(input('输入一个年龄:'))
    if age < 1 or age > 150:
        raise AgeError(age)
    else:
        print('正常的年龄:', age)
版权声明:本文为qq_20502569原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20502569/article/details/108785023

智能推荐

JetBrains 系列开发工具,如何配置 `SCSS` `File Watcher` ,相关输出配置参数详解:webStorm phpStorm IDEA

JetBrains 系列开发工具,如何配置 SCSS File Watcher ,相关输出配置参数详解:webStorm phpStorm IDEA 前言 你目前已经了解了如何使用 SCSS 进行开发,了解了该文章的内容:『 SCSS 日常用法 』 在 JetBrains 系列开发工具中通过 FileWatcher 进行编译的 SCSS 文件都是通过 sass 这个程序进行的。『 如何添加 Fil...

C语言小函数—二进制与十六进制

测试如下 “` int main() { long int num = 15; } “`...

仿微博或微信的文章多图显示(自定义MultiImageView)

按照一般的规矩,先上张图来供大伙看看 如果大致是大伙们需要实现的功能,不烦一观 自定义MultiImageView 工具类 具体使用 app.gradle中添加依赖 implementation 'com.github.bumptech.glide:glide:4.8.0' AndroidManifest.xml中配置联网权限 <uses-permission android:name=&q...

经典进程同步和互斥问题

经典进程同步与互斥问题 前言 一、生产者-消费者问题 1.问题描述 2.问题分析 3.代码 二、读者-写者问题 1.问题描述&&分析 2.代码 三、哲学家进餐问题 1.问题描述&&分析 2.代码 四、理发师问题 1.问题描述&&分析 2.代码 前言 在多道程序设计环境中,进程同步是一个非常重要的问题,下面讨论几个经典的进程同步问题。 一、生产者-消费...

java设计模式——ThreadLocal线程单例

1、定义一个ThreadLocal线程单例,代码如下: 2、定义一个多线程类,代码如下: 3、定义一个测试类,代码如下: 4、输出结果,如下图:...

猜你喜欢

【tensorflow】线性模型实战

线性模型:y = 1.477 * x + 0.089   1. 采样数据 采样噪声eps在均值0,方差0.01的高斯分布中,而后在均匀分布U(0,1)中,区间[-10,10]进行n=100次随机采样:   2. 计算误差 循环计算每个点的预测值与真是值之间差的平方并累加,从而获得训练集上的均芳误差损失值。   3. 计算梯度   4. 梯度更新 对权重w和偏...

常见损失函数和评价指标总结(附公式&代码)

网上看到一篇很实用的帖子关于常见损失函数和评价指标,收藏下来 本文转载于https://zhuanlan.zhihu.com/p/91511706 ------------------------------------------------------------------------------------------------------------------------------...

为什么 4G/5G 的直播延时依然很高

通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题。 本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和观众之间能够感觉到的明显网络延迟。除了业务上要求的延迟直播之外,有哪些因素会导致视频直播的延迟这么高呢? live-streaming  图 1 - ...

springboot 过滤器Filter vs 拦截器Interceptor 详解

1 前言       最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过滤器和拦截器的区别与联系。 2 拦截器与过滤器之间的区别 从上面对拦截器与过滤器的描述来看,它俩是非常相似的,都能对客户端发来的请求进行处理,它们的区别如下: 作用域不同 过滤器依赖于servlet容器,只能在 servlet容器,web环境下使用 拦截器依赖于sp...

IDEA环境--JavaWeb项目【分页功能实现】

参考链接:https://www.jianshu.com/p/d108d0cd9acf 1、前言 最近在写一些项目,遇到要使用分页功能的地方,就简单的学习了一下,在此总结一下具体实现的过程以及遇到的问题。 分页功能:当我们写一下web项目时会遇到一个页面要显示很多数据,一下子都显示出来效率会很低,也不美观。这就要用到分页,其作用也就是将数据分割成多个页面来进行显示。 2、项目介绍 这只是一个简单的...