欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件

程序员文章站 2022-04-15 11:36:38
...

**

1,异常的捕获以及多个except的用法

python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
**
except方法使用1 语法格式如下
try:
可能会出现问题的代码
except:
如果出现问题会执行except下方的代码

示例代码如下:

try:  
    a = int(input("请输入一个被除数:"))
    b = int(input("输入一个除数"))
    c = a / b
    print("结果为%g" % c)
except ZeroDivisionError:  
    print("输入错误")
except Exception as result:  # 如果不确定会出现什么异常时,使用此语句
    print(result)
    print(type(result))
except BaseException:  # 此异常为父类异常
    print("其他异常")  # 多个异常之间的顺序要求是:子类在前 父类在后

运行结果如下图所示:
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件

## except方法使用2 语法格式如下
try:
except(异常1,异常2,异常3…) as result:
使用元组存储多个异常的时候,多个异常之间没有顺序要求

实例代码如下:

try:
    a = int(input("输入一个被除数:"))
    b = int(input("输入一个除数"))
    c = a / b
    print(c)
except(Exception, ValueError, ZeroDivisionError) as e:
    print(e.args)
    print(type(e))
    print("遇到异常")

运行结果如下所示:
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件

2,try-except-else-finally的完整用法如下

try:
except 异常 as 变量:
else:
没有异常执行的代码
finally:
不管有没有异常,最后一定会执行的代码

实例代码如下:

file = open("123.txt", "w", encoding="utf-8")
file.write("hello world")
file.write("hello python")
file.write([1, 2, 3])
print("写入完毕")
file.close()
print("文件已关闭谢谢使用")

以上代码块是有错误的,因为write方法只能将字符串数据写入到文件中

修改后的代码如下:

try:
    file = open("123.txt", "w", encoding="utf-8")
    file.write("hello world")
    file.write("hello python")
    file.write([1, 2, 3])
    print("写入完毕")
except Exception as e:
    print(e.args)
    print(type(e))
else:
    print("没有异常,操作成功")
finally:
    file.close()  #打开文件之后,一定要关闭文件
    print("文件已关闭谢谢使用")

运行结果如下所示:
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
**

3,return语句和异常处理问题

**

return语句的两个作用:结束方法运行和返回值。

一般不把return放到异常处理结构中,而是放到方法的最后。

def test1():
    print("这是第一步")
    try:
        x=3/0
    except:
        print("这是第二步")
        print("异常,0不能做除数")
    finally:
        print("第三步")

    print("第4步")
    return "e"

print(test1())

**

4,异常的传递性

**

示例代码如下:

def test1():
    print(aa)

def test2():
    test1()

def test3():
    test1()

test3()

注:以上代码块是错误的,因为变量aa没有被定义
运行结果如下:
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件

5,raise主动抛出异常以及捕获异常

python中提供了一个Exception异常类
在开发时如果要满足特定业务需求,希望抛出异常,可以:
1,创建一个Exception类对象
2,使用raise关键字抛出异常对象
3,抛出异常之后,在调用函数的一方就可以捕获异常了。

示例代码如下:

def password():
    pwd = input("请输入密码:")
    if len(pwd) >= 8:
        return pwd
    print("主动抛出异常")

    ex = Exception("密码长度不够")
    raise ex

try:  
    print(password())
except Exception as result:
    print(result)
    print(type(result))

运行结果如下:
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
**

6,自定义异常类

**
1,在程序开发中,有时也需要自己定义异常类。自定义异常一般都是运行时异常,通常继承Exception或者其子类即可,命名一般以Error,Exception为后缀。

2,自定义异常由raise语句主动抛出

class AgeError(Exception):
    def __init__(self, error_info):
        Exception.__init__(self)
        self.error_info = error_info

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

# 如果为True,则模块是作为独立文件运行,可以执行测试代码
if __name__ == "__main__":
    age = int(input("请输入年龄:"))
    if age < 1 or age > 150:
        raise AgeError(age)
    else:
        print("正常的年龄",age)

运行结果为:

请输入年龄:200
Traceback (most recent call last):
  File "E:/06_面向对象/LX_15_单例.py", line 13, in <module>
    raise AgeError(age)
__main__.AgeError: 200年龄错误,应该在1-150之间

**

7,常见异常汇总 需熟悉并记忆

**
1,SyntaxError 语法错误
2,NameError 尝试访问一个没有申明的变量
3,ZeroDivisionError 除数为0错误 (零除错误)
4,ValueError 数值错误
5,TypeError 类型错误
6,AttributeError 访问对象不存在的属性
7,IndexError 索引越界异常
8,KeyError 字典的关键字不存在

异常汇总如下图:
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
**

8,traceback模块的使用 将异常信息写入日志文件

**

import traceback
try:
    print("step开始了")
    num = 1/0
except:
    with open("e:/88.txt","a") as f:
        traceback.print_exc(file=f)

运行结果为:

step开始了

以上

如果错误,欢迎指正

欢迎粘贴复制 评论转发点赞

轻轻一点 好运连连