Python基础学习之异常操作总结 怼烎@ 2022-12-13 09:53 259阅读 0赞 # Python基础学习之异常操作总结 # ### 文章目录 ### * Python基础学习之异常操作总结 * * 1. 异常捕获 * * 1.1 捕获所有异常 * 1.2 捕捉指定异常 * 1.3 捕捉多个异常 * * 1.3.1 不区分优先级 * 1.3.2 区分优先级 * 1.4 异常中的else * 1.5 异常中的finally * 2. 用户自定义异常\_raise 主动触发异常 * 3. 查看异常位置\_traceback模块 * 4. 常见异常名 & 描述 在Python运行遇到异常时,程序会终止;而在我们编程过程中,错误是不可避免的,这时我们需要捕捉到异常,还需要程序继续运行;这时我们就需要根据异常Traceback到出错点,进行分析改正; ## 1. 异常捕获 ## 当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python的异常捕获常用try…except…结构,把可能发生错误的语句放在try模块里,用except来处理异常,每一个try,都必须至少对应一个except。 ### 1.1 捕获所有异常 ### 捕获所有异常的语句如下: # 捕获所有异常 try: <语句> # 需要被判断的语言块 except: <异常处理语句> # 出现异常后的处理语句 例子: import sys try: sys.exit() except: print('异常被捕捉到啦~~') # 输出: # '异常被捕捉到啦~~' 以上语句中,由于没有指定异常,所有的异常都将被捕捉,甚至包括键盘中断和程序退出请求;(try后的语句中如果使用sys.exit(),无法退出python程序,因为sys.exit()作为异常被捕获了;) try: <语句> except Exception: <异常处理语句> # 出现异常后的处理语句 例子: import sys try: sys.exit() except Exception: print('异常被捕捉到啦~~') # 程序退出了,说明没有捕捉到异常; 在except后增加Exception,可以捕捉全部异常,但是不会捕捉键盘中断和程序退出请求; ### 1.2 捕捉指定异常 ### 捕捉指定异常,只需要在except后增加异常的名称即可;这里的异常名称可以使用报错的异常名称; # 捕捉指定异常 try: <语句> except <异常名>: <异常处理语句> # 出现异常后的处理语句 ### 1.3 捕捉多个异常 ### #### 1.3.1 不区分优先级 #### 把需要捕捉的异常名称全部列在except后,这时异常没有优先级,全部捕捉; # 捕捉多个异常,不区分优先级 try: <语句> except (<异常名1>, <异常名2>, ...): <异常处理语句> # 出现异常后的处理语句 #### 1.3.2 区分优先级 #### 如果需要区分异常的优先级,则将except按照优先级分开处理,举例如下: # 捕捉多个异常,区分优先级 try: <语句> except <异常名1>: print('异常说明1') except <异常名2>: print('异常说明2') except <异常名3>: print('异常说明3') 处理顺序:当异常发生时,先执行异常名1的语句,如果匹配则执行:print(‘异常说明1’),若不匹配,则执行异常名2,以此类推; 备注:1. 这种方式可以支持的except语句的数量没有限制; 2. 如果都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。 ### 1.4 异常中的else ### 当try语句中没有某些异常时,我们可以添加else语句,来执行其他语句;即:若有异常发生则执行异常处理语句,若无异常发生,则执行else语句; # 异常中的else try: <语句> except <异常名1>: <异常处理语句> # 有异常发生时,执行该语句 else: <语句> # 无异常发生时,则执行该语句 ### 1.5 异常中的finally ### 有些时候,无论try语句中是否有异常,我们都希望执行一些语句,这时候需要使用finally语句;即:无论异常是否发生,都会执行finally语句; # 异常中的finally语句 try: <语句> finally: <语句> ## 2. 用户自定义异常\_raise 主动触发异常 ## 在python编程中,我们可以主动触发异常,即:我们可以规定何种情况下生成何种异常; def not_zero(num): try: if num == 0: raise ValueError('参数为0,参数错误') return num except Exception as e: print('错误类型为:',e.__class__.__name__) print('错误详情为:',e) not_zero(0) 输出: 错误类型为: ValueError 错误详情为: 参数为0,参数错误 ## 3. 查看异常位置\_traceback模块 ## 有时我们需要打印出发生异常的位置,就需要使用traceback模块;举例如下: import traceback try: 1/0 except Exception as e: print(e) print('---------------------') traceback.print_exc() print('---------------------') a = traceback.format_exc() print(a) print('---------------------') 输出: # print(e)的输出结果 division by zero --------------------- --------------------- # print(a) 的输出结果 Traceback (most recent call last): File "D:/PY_useful/3_python 基础/11.异常处理.py", line 21, in <module> 1/0 ZeroDivisionError: division by zero --------------------- # traceback.print_exc()的输出结果,默认的位置是输出结果的最后位置,如本例中,输出在最后 Traceback (most recent call last): File "D:/PY_useful/3_python 基础/11.异常处理.py", line 21, in <module> 1/0 ZeroDivisionError: division by zero ## 4. 常见异常名 & 描述 ## <table> <thead> <tr> <th>异常名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>BaseException</td> <td>所有异常的基类</td> </tr> <tr> <td>SystemExit</td> <td>解释器请求退出</td> </tr> <tr> <td>KeyboardInterrupt</td> <td>用户中断执行(通常是输入^C)</td> </tr> <tr> <td>Exception</td> <td>常规错误的基类</td> </tr> <tr> <td>StopIteration</td> <td>迭代器没有更多的值</td> </tr> <tr> <td>GeneratorExit</td> <td>生成器(generator)发生异常来通知退出</td> </tr> <tr> <td>SystemExit</td> <td>Python 解释器请求退出</td> </tr> <tr> <td>StandardError</td> <td>所有的内建标准异常的基类</td> </tr> <tr> <td>ArithmeticError</td> <td>所有数值计算错误的基类</td> </tr> <tr> <td>FloatingPointError</td> <td>浮点计算错误</td> </tr> <tr> <td>OverflowError</td> <td>数值运算超出最大限制</td> </tr> <tr> <td>ZeroDivisionError</td> <td>除(或取模)零 (所有数据类型)</td> </tr> <tr> <td>AssertionError</td> <td>断言语句失败</td> </tr> <tr> <td>AttributeError</td> <td>对象没有这个属性</td> </tr> <tr> <td>EOFError</td> <td>没有内建输入,到达EOF 标记</td> </tr> <tr> <td>EnvironmentError</td> <td>操作系统错误的基类</td> </tr> <tr> <td>IOError</td> <td>输入/输出操作失败</td> </tr> <tr> <td>OSError</td> <td>操作系统错误</td> </tr> <tr> <td>WindowsError</td> <td>系统调用失败</td> </tr> <tr> <td>ImportError</td> <td>导入模块/对象失败</td> </tr> <tr> <td>KeyboardInterrupt</td> <td>用户中断执行(通常是输入^C)</td> </tr> <tr> <td>LookupError</td> <td>无效数据查询的基类</td> </tr> <tr> <td>IndexError</td> <td>序列中没有没有此索引(index)</td> </tr> <tr> <td>KeyError</td> <td>映射中没有这个键</td> </tr> <tr> <td>MemoryError</td> <td>内存溢出错误(对于Python 解释器不是致命的)</td> </tr> <tr> <td>NameError</td> <td>未声明/初始化对象 (没有属性)</td> </tr> <tr> <td>UnboundLocalError</td> <td>访问未初始化的本地变量</td> </tr> <tr> <td>ReferenceError</td> <td>弱引用(Weak reference)试图访问已经垃圾回收了的对象</td> </tr> <tr> <td>RuntimeError</td> <td>一般的运行时错误</td> </tr> <tr> <td>NotImplementedError</td> <td>尚未实现的方法</td> </tr> <tr> <td>SyntaxError</td> <td>Python 语法错误</td> </tr> <tr> <td>IndentationError</td> <td>缩进错误</td> </tr> <tr> <td>TabError</td> <td>Tab 和空格混用</td> </tr> <tr> <td>SystemError</td> <td>一般的解释器系统错误</td> </tr> <tr> <td>TypeError</td> <td>对类型无效的操作</td> </tr> <tr> <td>ValueError</td> <td>传入无效的参数</td> </tr> <tr> <td>UnicodeError</td> <td>Unicode 相关的错误</td> </tr> <tr> <td>UnicodeDecodeError</td> <td>Unicode 解码时的错误</td> </tr> <tr> <td>UnicodeEncodeError</td> <td>Unicode 编码时错误</td> </tr> <tr> <td>UnicodeTranslateError</td> <td>Unicode 转换时错误</td> </tr> <tr> <td>Warning</td> <td>警告的基类</td> </tr> <tr> <td>DeprecationWarning</td> <td>关于被弃用的特征的警告</td> </tr> <tr> <td>FutureWarning</td> <td>关于构造将来语义会有改变的警告</td> </tr> <tr> <td>OverflowWarning</td> <td>旧的关于自动提升为长整型(long)的警告</td> </tr> <tr> <td>PendingDeprecationWarning</td> <td>关于特性将会被废弃的警告</td> </tr> <tr> <td>RuntimeWarning</td> <td>可疑的运行时行为(runtime behavior)的警告</td> </tr> <tr> <td>SyntaxWarning</td> <td>可疑的语法的警告</td> </tr> <tr> <td>UserWarning</td> <td>用户代码生成的警告</td> </tr> </tbody> </table>
相关 Python基础学习之异常操作总结 Python基础学习之异常操作总结 文章目录 Python基础学习之异常操作总结 1. 异常捕获 1.1 捕获所有异常 怼烎@/ 2022年12月13日 09:53/ 0 赞/ 260 阅读
相关 Python基础学习之文件操作 Python基础学习之文件操作 文章目录 Python基础学习之文件操作 1. open() 函数 表一:文件模式表 心已赠人/ 2022年12月11日 12:14/ 0 赞/ 192 阅读
相关 Python基础学习之数据类型操作 Python基础学习之数据类型 文章目录 Python基础学习之数据类型 1. 数字类型 1.1 整型(Int) 水深无声/ 2022年12月09日 02:59/ 0 赞/ 309 阅读
相关 Python基础学习之字典操作 Python基础学习之字典操作 文章目录 Python基础学习之字典操作 1. 字典的创建 1.1 直接赋值法 ╰半橙微兮°/ 2022年12月08日 05:38/ 0 赞/ 372 阅读
相关 Python基础学习之列表操作 Python基础学习之列表操作 文章目录 Python基础学习之列表操作 1. 列表的增,删,改,查 1.1 列表的增加 左手的ㄟ右手/ 2022年12月08日 05:18/ 0 赞/ 488 阅读
相关 Python基础学习之字符串操作 Python基础学习之字符串操作 文章目录 Python基础学习之字符串操作 1. 字符串的切片 \[\] 2. 字符 清疚/ 2022年12月08日 04:24/ 0 赞/ 321 阅读
相关 Python基础学习(一)之切片操作 Python的宗旨,一行代码能实现的功能,绝对不写5行代码,始终记住,代码越少,开发效率越高. 取一个list或者tuple的部分元素是很常见的操作: >>>L=\['Be 超、凢脫俗/ 2022年06月16日 14:13/ 0 赞/ 278 阅读
相关 python基础学习总结——文件操作 写文件 text="hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh" f = open('1.txt','w') f.writ ╰+攻爆jí腚メ/ 2022年06月16日 06:27/ 0 赞/ 283 阅读
相关 java基础之异常总结 1.异常的体系 Throwable Error 通常出现重大问题如:运行的类不存在或者内存溢出等。 深碍√TFBOYSˉ_/ 2022年06月13日 08:24/ 0 赞/ 237 阅读
相关 【Python】python学习之总结 1 迭代器: 2 def gen(): 3 a = 100 4 yield a 5 a = a 8 电玩女神/ 2021年10月01日 07:54/ 0 赞/ 369 阅读
还没有评论,来说两句吧...