异常

try...一个except结构

python 复制代码
try: 
    被监控的可能引发异常的语句块 
except  BaseException [as  e]: 
    异常处理语句块
    
  1. try块包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。
  2. 执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;
  3. 执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处 理异常;异常处理完后,继续执行后续代码。
python 复制代码
try:  
    print("step1")  
    a = 3/0  
    print("step2")  
except BaseException as e:  
    print("step3")  
    print(e)  

print("step4")  
  
"""  
step1  
step3  
division by zero  
step4  
"""

【示例】循环输入数字,如果不是数字则处理异常;直到输入 88 ,则结束循环。

python 复制代码
while True:  
    try:  
        num = input("请输入数字...")  
        print(int(num))  
        if int(num) == 88:  
            break  
    except BaseException as e:  
        print(e)

try...多个except结构

上面的结构可以捕获所有的异常,但是一般建议尽量捕获可能出现的多个异常,并且针对性的写出异常处理代码。为了避免遗漏可 能出现的异常,可以在最后增加 BaseException 。

python 复制代码
try: 
    被监控的、可能引发异常的语句块 
except  Exception1: 
    处理Exception1的语句块 
except  Exception2: 
    处理Exception2的语句块 
[...] 
except  BaseException: 
    处理可能遗漏的异常的语句块
python 复制代码
try:  
    a = input("请输入被除数:")  
    b = input("请输入除数:")  
    c = float(a)/float(b)  
    print(c)  
except ZeroDivisionError:  
    print("除数不能为0...")  
except TypeError:  
    print("不是数值类型...")  
except BaseException as e:  
    print(e)  
    print(type(e))

try...except...else结构

try...except...else 结构增加了 else块 。如果 try 块中没有抛出异常,则执行 else 块。如果 try 块中抛出异常,则执行 except 块,不执行 else 块。

python 复制代码
try:  
    a = input("请输入被除数:")  
    b = input("请输入除数:")  
    c = float(a)/float(b)  
  
except ZeroDivisionError:  
    print("除数不能为0...")  
except TypeError:  
    print("不是数值类型...")  
except BaseException as e:  
    print(e)  
    print(type(e))  
else:  
    print(c)

try...except...finally结构

try...except...finally 结构中, finally 块无论是否发生异常都会被执行;通常 用来释放 try 块中申请的资源

python 复制代码
try:  
    a = input("请输入被除数:")  
    b = input("请输入除数:")  
    c = float(a)/float(b)  
except ZeroDivisionError:  
    print("除数不能为0...")  
except TypeError:  
    print("不是数值类型...")  
except BaseException as e:  
    print(e)  
    print(type(e))  
else:  
    print(c)  
finally:  
    print("finally...")

traceback模块和生成异常日志

【示例】使用 traceback 模块打印异常信息

python 复制代码
import traceback  
  
try:  
    print("step1")  
    num = 1/0  
except:  
    traceback.print_exc()

【示例】使用 traceback 将异常信息写入日志文件

python 复制代码
import traceback  
  
try:  
    print("step1")  
    num = 1/0  
except:  
    with open("err.log","a") as f:  
    traceback.print_exc(file=f)

自定义异常类

程序开发中,有时候我们也需要自己定义异常类。自定义异常类一 般都是运行时异常,通常继承 Exception 或其子类即可。自定义异常由 raise 语句主动抛出。

python 复制代码
class AgeError(Exception):  
    def __init__(self, errorInfo):  
        Exception.__init__(self)  
        self.errorInfo = errorInfo  
  
    def __str__(self):  
        return str(self.errorInfo)  
  
if __name__ == "__main__":  
    age = int(input("请输入一个年龄"))  
    if age<1 or age>150:  
        raise AgeError(age)  
    else:  
        print(age)
相关推荐
这里有鱼汤4 分钟前
熟练掌握MACD这8种形态,让你少走三年弯路(附Python量化代码)| 建议收藏
后端·python
404.Not Found12 分钟前
Day46 Python打卡训练营
开发语言·python
love530love14 分钟前
【PyCharm必会基础】正确移除解释器及虚拟环境(以 Poetry 为例 )
开发语言·ide·windows·笔记·python·pycharm
运维开发王义杰22 分钟前
Python: 告别 ModuleNotFoundError, 解决 pipx 环境下 sshuttle 缺少 pydivert 依赖的终极指南
开发语言·python
DanCheng-studio1 小时前
毕设 基于机器视觉的驾驶疲劳检测系统(源码+论文)
python·毕业设计·毕设
carpell1 小时前
【语义分割专栏】3:Segnet实战篇(附上完整可运行的代码pytorch)
人工智能·python·深度学习·计算机视觉·语义分割
一只小波波呀2 小时前
打卡第48天
python
zstar-_2 小时前
一套个人知识储备库构建方案
python
Amo Xiang2 小时前
《100天精通Python——基础篇 2025 第5天:巩固核心知识,选择题实战演练基础语法》
python·选择题·基础语法
江梦寻2 小时前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式