首页 > 编程语言 >python - 异常

python - 异常

时间:2024-12-02 10:34:18浏览次数:7  
标签:Exception python 抛出 +-- print 异常 捕获

Exception 和 Error 的区别

python 与 java 不一样,python 的所有异常类,都继承自 BaseException ,并不严格区分 Error 和 Exception。

以 SyntaxError 为例,名字虽然叫 Error,但实际也是继承自 Exception。

java 的规范:

  1. 将可预知的,而不影响程序执行的,称之为 Exception,比如:参数格式不对;
  2. 不可预知的、致命的,可能影响到程序自身运行的,称之为 Error,比如:系统内存溢出。

自定义异常和异常捕获

# 自定义异常
class MyCustomException(Exception):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return self.message


# 多行注释
def pr(a):
    try:
        if a > 0:
            # 抛出自定义异常
            raise MyCustomException("这是一个自定义的异常信息")
    except MyCustomException as e:
        # 异常处理
        print(e)
        # 重新抛出异常
        raise e
    else:
        # 业务处理代码块
        print('done')
    finally:
        # 必定执行的代码块
        print('finally')
    pass


pr(0)
pr(1)

不建议捕获的异常

这几个异常比较特殊,与 Exception 是同级关系,直接继承自 BaseException。

  • SystemExit异常在解释器请求退出时触发,比如执行sys.exit()。
  • KeyboardInterrupt异常在用户按下中断键(通常是Ctrl+C)时触发,用于中断程序的执行。
  • GeneratorExit异常在从生成器中调用close()方法或发送EXIT信号时触发,用于清理生成器。

如果尝试捕获这些异常,通常是为了处理它们,这可能会导致意想不到的副作用,因为它们通常表示程序应当立即终止的情况。

如果你确实需要捕获这些异常,并且你清楚自己在做什么,你可以按照以下方式捕获:

import sys
 
try:
    # 触发SystemExit的操作,例如:sys.exit()
    sys.exit()
except SystemExit:
    print("捕获到SystemExit异常")
	
 
# 按下Ctrl+C触发KeyboardInterrupt异常
try:
    input("按下Ctrl+C退出:")
except KeyboardInterrupt:
    print("捕获到KeyboardInterrupt异常")
	
 
# 生成器中发送EXIT信号触发GeneratorExit异常
def gen():
    while True:
        try:
            yield
        except GeneratorExit:
            print("捕获到GeneratorExit异常")
            break
 
g = gen()
g.close()

继承关系

下面由 AI 生成,可能存在部分错误,使用时需要注意甄别

BaseException
	 +-- SystemExit
	 +-- KeyboardInterrupt
	 +-- GeneratorExit
	 +-- Exception
		 +-- StopIteration
		 +-- StopAsyncIteration
		 +-- ArithmeticError
		 |    +-- FloatingPointError
		 |    +-- OverflowError
		 |    +-- ZeroDivisionError
		 +-- AssertionError
		 +-- AttributeError
		 +-- BufferError
		 +-- EOFError
		 +-- ImportError
		 |    +-- ModuleNotFoundError
		 +-- LookupError
		 |    +-- IndexError
		 |    +-- 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
		 |    +-- IndentationError
		 |         +-- TabError
		 +-- SystemError
		 +-- TypeError
		 +-- ValueError
		 |    +-- UnicodeError
		 |         +-- UnicodeDecodeError
		 |         +-- UnicodeEncodeError
		 |         +-- UnicodeTranslateError
		 +-- Warning
			   +-- DeprecationWarning
			   +-- PendingDeprecationWarning
			   +-- RuntimeWarning
			   +-- SyntaxWarning
			   +-- UserWarning
			   +-- FutureWarning
			   +-- ImportWarning
			   +-- UnicodeWarning
			   +-- BytesWarning
			   +-- EncodingWarning
			   +-- ResourceWarning

常见的异常

‌* SyntaxError‌:当Python解释器发现程序中有语法错误时,会抛出SyntaxError异常。例如,在Python3.X版本中,print函数需要加括号,如果不加括号就会抛出SyntaxError异常‌。
‌* NameError‌:当尝试访问一个未声明的变量时,会引发NameError。例如,如果变量未定义就使用,Python会抛出NameError异常‌。
‌* TypeError‌:当尝试使用不支持的操作类型时,会抛出TypeError异常。例如,将字符串和整数相加会导致TypeError‌。
‌* ZeroDivisionError‌:尝试除以零时,会抛出ZeroDivisionError异常‌。
‌* IndexError‌:尝试访问列表或元组中不存在的元素时,会抛出IndexError异常‌。
‌* KeyError‌:尝试访问字典中不存在的键时,会抛出KeyError异常‌。
‌* ValueError‌:函数参数类型正确但参数值错误时,会抛出ValueError异常‌。
‌* AttributeError‌:对象没有这个属性时,会抛出AttributeError异常‌。
‌* ArithmeticError‌:所有数值计算错误的基类‌。
‌* AssertionError‌:断言语句失败时抛出AssertionError‌。
‌* EnvironmentError‌:操作系统错误的基类‌。
‌* FloatingPointError‌:浮点计算错误时抛出FloatingPointError‌。
‌* ImportError‌:导入模块/对象失败时抛出ImportError‌。
‌* IndentationError‌:缩进不正常时抛出IndentationError。

标签:Exception,python,抛出,+--,print,异常,捕获
From: https://www.cnblogs.com/chenss15060100790/p/18581161

相关文章

  • python - 基础数据类型
    基础数据类型基础数据类型空值(none)整数(int):表示整数,例如x=2。浮点数(float):表示带有小数点的数值,例如y=1.23。复数(complex):包含实部和虚部的数值,例如z=4+4j。布尔值(bool):表示真(True)或假(False),例如is_true=True。字符串(str):表示文本数据,例如text="Welcome,......
  • python - import
    import语法python中包要包含一个空的init.py文件#引用同级目录的a.pyimporta#向上一级文件夹,引用imath(同一个包才能这么调用,如果是主模块会报错)from..importimath#向上两级文件夹,引用imath(同一个包才能这么调用,如果是主模块会报错)from...importimath......
  • mysql Error Code 1175异常解决方法
    第一种方法:当用MySQLWorkbench进行数据库的批量更新时,执行一个语句会碰到以下错误提示:ErrorCode:1175Youareusingsafe...withoutaWHEREthatusesaKEYcolumn因为是MySQLWorkbench的默认的安全设置是不能批量更新表的。当要执行的SQL语句是进行批量更新或者删除的......
  • python - 面向对象
    面向内容与java一致,包含三大特点:封装、继承和多态。定义一个对象classPerson:#构造函数def__init__(self,name,age):self.name=nameself.age=age#定义一个函数defsay_hello(self):print("Hello{}!".format(self.......
  • python - 函数
    标准写法定义一个函数,函数名叫summary(),函数有两个参数:a和b,a的默认值为1,b的默认值为2;:int指定参数为int类型(注解);->int指定返回值为int(注解);r""""""是标准的函数注释;要是空函数,还没想好功能,用pass进行占位defsummary(a:int=1,b:int=2)->int:......
  • 【Python TensorFlow】进阶指南(续篇五)
    在之前的文章中,我们深入探讨了TensorFlow的高级功能,包括模型优化、异步训练、在线学习、模型服务化、安全与隐私保护、模型版本控制、模型监控、模型压缩与量化、迁移学习、动态调整与自适应训练策略、增强学习与深度强化学习,以及最新硬件加速器的应用等。本文将继续探索更......
  • python 类和对象
    python类和对象1.什么是类2.什么是对象3.面向对象的三大特征3.1封装3.2继承3.3多态4.总结类和对象是面向对象编程的核心概念,而面向对象是我们python编程中的一个重要编程方法,本篇文章将带你初识类和对象。1.什么是类类是一种用于创建对象的蓝图或模板。它定义了......
  • Kali Linux怎么开python虚拟环境
    相信很多朋友再学习的过程中都会遇到一些pip失效,或者报错的时候,他们要求我们要使用虚拟环境,但是不知道怎么搭建,下面这篇文章就来告诉你如何搭建虚拟环境,这个方法在所有Linux的服务器都通用,就两行命令安装venv模块(Python3.3及以上版本自带,无需安装)python3-mvenvmyenv......
  • D85【python 接口自动化学习】- pytest基础用法
    day85pytest指定目录或文件执行测试用例学习日期:20241201学习目标:pytest基础用法--pytest指定目录,文件执行测试用例学习笔记:pytest指定目录或文件执行测试用例终端执行用例pytest不跟目标目录或文件,执行根目录下所有符合规则的测试用例终端执行用例pytest指定......
  • python基础学习6和7
    模块类与对象模块内置模块time,random,os,json第三方模块requests,pandas,numpy,....自定义模块xxx.py常见的内置模块hashlib模块该模块主要是进行数据加密的作用。常见的加密方式:sha256()【可逆】md5()【不可逆】importhashlibinfo='123456'#......