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

**

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

python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件_第1张图片
**
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模块 异常信息写入日志文件_第2张图片

## 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模块 异常信息写入日志文件_第3张图片

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模块 异常信息写入日志文件_第4张图片
**

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张图片

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张图片
**

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 
    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模块 异常信息写入日志文件_第7张图片
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件_第8张图片
python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件_第9张图片
**

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开始了

以上

如果错误,欢迎指正

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

轻轻一点 好运连连

你可能感兴趣的:(python,1)