首页 > 其他分享 >多组异常处理基础

多组异常处理基础

时间:2023-07-22 10:11:55浏览次数:29  
标签:错误 多组 my 引发 NameError 处理 print 异常

1. 常见的内置异常类

 

 1.1 Exception

1 try:
2     # 一些代码
3 except SpecificException:
4     # 处理特定的异常类型
5 except AnotherException:
6     # 处理另一种异常类型
7 except Exception as e:
8     # 捕获其他未处理的异常,并进行适当处理
9     print(f"捕获到异常:{str(e)}")

当无法再精确确定异常类,就使用Excepion兜底。

 

1.2 AttributeError

 1 '''
 2 AttributeError是Python中的一个内置异常类,
 3 它表示访问对象属性或方法时发生了错误。当你尝试访问一个不存在的属性或方法时,就会引发AttributeError异常。
 4 '''
 5 
 6 
 7 # 1. 对象没有某个属性:当你尝试访问一个对象上不存在的属性时,会引发AttributeError异常。
 8 class MyClass:
 9     pass
10 
11 
12 obj = MyClass()
13 # AttributeError: 'MyClass' object has no attribute 'attribute'
14 print(obj.attribute)  # 这里将会引发AttributeError异常
15 
16 # 2. 模块或包没有某个属性:当你尝试从模块或包中导入一个不存在的属性时,会引发AttributeError异常。
17 import math
18 
19 #  AttributeError: module 'math' has no attribute 'unknown_func'
20 print(math.unknown_func)  # 这里将会引发AttributeError异常
21 
22 # 4. 通过try-except捕获并处理异常
23 try:
24     obj = MyClass()
25     print(obj.attribute)
26 except AttributeError:
27     print("对象没有'attribute'属性")

 1.3 FileNotFoundError

 1 '''
 2 FileNotFoundError是Python中的一个内置异常类,它表示在文件操作中发生了文件未找到的错误。
 3 当你尝试打开或操作一个不存在的文件时,就会引发FileNotFoundError异常。
 4 
 5 需要注意的是,当涉及文件操作时,还可能出现其他类型的异常,例如权限错误(PermissionError)或IO错误(IOError)。
 6 因此,在处理文件操作时,最好使用多个except块来处理不同类型的异常。
 7 '''
 8 
 9 # 1. 文件不存在:当你尝试打开一个不存在的文件时,会引发FileNotFoundError异常。
10 '''
11 Traceback (most recent call last):
12   File "F:\异常04-常见内置异常类FileNotFoundError.py", line 7, in <module>
13     with open(file='1.txt', encoding='utf-8'):
14          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15 FileNotFoundError: [Errno 2] No such file or directory: '1.txt'
16 '''
17 with open(file='1.txt', encoding='utf-8'):
18     pass
19 
20 
21 # 2. 当发生FileNotFoundError异常时,可以通过捕获该异常并采取相应的处理措施,例如打印错误消息、提供默认值或执行其他操作。
22 try:
23     with open(file='1.txt', encoding='utf-8'):
24         pass
25 except FileNotFoundError as e:
26     print(e)  # 打印错误信息
27 '''
28 Traceback (most recent call last):
29   File "F:\异常04-常见内置异常类FileNotFoundError.py", line 14, in <module>
30     with open(file='1.txt', encoding='utf-8'):
31          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
32 FileNotFoundError: [Errno 2] No such file or directory: '1.txt'
33 '''
 1 try:
 2     with open(file=r'C:\Windows\System32\drivers\etc\hosts', encoding='utf-8') as my_file:
 3         print("打开文件")
 4         pass
 5 except FileNotFoundError as e:
 6     print(e)  # 打印错误信息
 7 except PermissionError as e:
 8     print(e)  # 打印错误信息
 9 finally:
10     my_file.close()

1.4 IndexError

 1 '''
 2 IndexError是Python中的一个内置异常类,它表示在使用了无效的索引或序列访问时发生了错误。
 3 当你尝试使用超出范围的索引来访问列表、元组、字符串或其他序列类型的元素时,就会引发IndexError异常。
 4 '''
 5 
 6 # 1. 列表越界:当你尝试使用一个超出列表范围的索引来访问其元素时,会引发IndexError异常
 7 my_list = [1, 2, 3]
 8 print(my_list[3])  # 这里将会引发IndexError异常  IndexError: list index out of range
 9 
10 # 2. 字符串索引错误:当你尝试使用一个超出字符串范围的索引来访问其字符时,同样会引发IndexError异常
11 my_string = "Hello"
12 print(my_string[5])  # 这里将会引发IndexError异常  IndexError: string index out of range
13 
14 # 3. 元组索引错误:与列表类似,如果你尝试使用一个超出元组范围的索引来访问其元素,也会引发IndexError异常。
15 my_tuple = (1, 2, 3)
16 
17 try:
18     print(my_tuple[3])
19 except IndexError:
20     print("列表索引超出范围")

1.5 KeyError

 1 '''
 2 KeyError是Python中的一个内置异常类,它表示在字典或类似映射对象中访问不存在的键时发生了错误。
 3 当你尝试使用一个不存在的键来访问字典中的值时,就会引发KeyError异常。
 4 '''
 5 
 6 # 1. 字典中不存在的键:当你尝试使用一个字典中不存在的键来访问其对应的值时,会引发KeyError异常
 7 my_dict = {"name": "Alice", "age": 25}
 8 print(my_dict["address"])  # 这里将会引发KeyError异常 KeyError: 'address'
 9 
10 # 2. 字典为空:如果尝试从一个空字典中访问任何键时,也会引发KeyError异常
11 empty_dict = {}
12 print(empty_dict["key"])  # 这里将会引发KeyError异常  KeyError: 'key'
13 
14 # 3. 当发生KeyError异常时,可以通过捕获该异常并采取相应的处理措施,例如提供默认值、打印错误消息或执行其他操作。
15 my_dict = {"name": "Alice", "age": 25}
16 
17 try:
18     print(my_dict["address"])
19 except KeyError:
20     print("字典中没有'address'键")

1.6 MemoryError

 1 '''
 2 MemoryError是Python中的一个内置异常类,它表示在尝试分配内存时发生了内存不足的错误。
 3 当你的程序需要分配更多内存,但系统没有足够的可用内存时,就会引发MemoryError异常。
 4 
 5 当发生MemoryError异常时,通常很难通过捕获该异常来进行处理。因为在发生内存错误之后,程序的状态可能已经无法恢复。
 6 最好的做法是确保你的程序在设计上合理地管理内存,并尽量避免出现内存错误。
 7 
 8 然而,你可以通过一些方法来缓解内存问题,如使用生成器而不是列表来生成大量数据,或者使用适当的数据结构和算法来减少内存占用。
 9 '''
10 #
11 # 1. 内存不足:当你的程序需要分配更多内存来存储数据或执行操作,但系统没有足够的可用内存时,会引发MemoryError异常
12 # large_list = [1] * 10**19  #  OverflowError: cannot fit 'int' into an index-sized integer
13 large_list = [1] * 10 ** 9
14 large_list = large_list * 1000  # 这里将会引发MemoryError异常  MemoryError
15 
16 
17 # 2. 递归深度过大:在递归函数中,如果递归的层数过多导致内存占用过高,也可能引发MemoryError异常
18 def recursive_function(n):
19     if n == 0:
20         return
21     recursive_function(n - 1)
22 
23 
24 recursive_function(10 ** 6)  # 这里可能会引发MemoryError异常

1.7 NameError

 1 '''
 2 NameError是Python中的一个内置异常类,它表示在使用未定义或不存在的名称时发生了错误。
 3 当你尝试访问一个不存在的变量、函数、类或模块时,就会引发NameError异常。
 4 '''
 5 
 6 # 1. 变量未定义:当你尝试使用一个未定义的变量时,会引发NameError异常。
 7 print(undefined_variable)  # 这里将会引发NameError异常
 8 
 9 # 2. 函数或方法未定义:当你尝试调用一个不存在的函数或方法时,也会引发NameError异常
10 undefined_function()  # 这里将会引发NameError异常
11 
12 # 3. 类或模块未定义:当你尝试访问一个不存在的类或模块时,同样会引发NameError异常
13 
14 import undefined_module  # 这里将会引发NameError异常
15 
16 # 4. 处理异常
17 try:
18     print(undefined_variable)
19 except NameError:
20     print("变量未定义")

 

1.8 SyntaxError

 1 '''
 2 SyntaxError是Python中的一个内置异常类,它表示在解析和执行Python代码时发生了语法错误。
 3 当你的代码违反了Python语法规则或存在语法问题时,就会引发SyntaxError异常。
 4 '''
 5 # 坑1. 拼写错误:当你在变量名、函数名或关键字中出现拼写错误时,会引发NameError已,而不是SyntaxError异常。
 6 # prnt("Hello, World!")  # 这里将会引发NameError异常  # NameError: name 'prnt' is not defined. Did you mean: 'print'?
 7 
 8 # 坑2. 缩进错误:Python使用缩进来表示代码块,如果你的缩进不正确,例如混合使用空格和制表符,或者缺少了必要的缩进,都会引发IndentationError,而不是SyntaxError异常。
 9 # def my_function():
10 # print("Hello, World!")  # IndentationError: expected an indented block after function definition on line 9
11 
12 
13 
14 # 1.标点符号错误:如果你在代码中遗漏了逗号、冒号、引号等标点符号,也会导致SyntaxError异常
15 my_list = [1, 2, 3
16 print(my_list)  # 这里将会引发SyntaxError异常,SyntaxError: '[' was never closed

语法错误,pycharm会把你标识出来

 1.9 TypeError

'''
TypeError是Python中的一个内置异常类,它表示在使用了错误的数据类型或参数类型时发生了错误。
当你尝试对不兼容的对象执行操作或传递错误类型的参数时,就会引发TypeError异常
'''

# 1. 不兼容的操作:当你对不支持的数据类型执行操作时,例如将字符串与数字相加,会引发TypeError异常
x = "Hello"
y = 5


# result = x + y  # 字符串与整型做+操作,会导致类型不兼容即这里将会引发TypeError异常  TypeError: can only concatenate str (not "int") to str

# 坑1. 错误的参数类型:当你向函数传递错误类型的参数时,也会引发TypeError异常。
def multiply(a, b):
    return a * b


result = multiply("2", 3)  # 这里不会引发TypeError异常,因为字符串支持 str * n作为乘积即字符串变成n个str
print(result)  # 222

1.10 ValueError

'''
ValueError是Python中的一个内置异常类,它表示在使用了正确类型的对象但是值不合法时发生了错误。
当你尝试对一个对象进行操作或传递给函数时,其值不符合预期范围或无效时,就会引发ValueError异常。
'''

# 1. 类型转换错误:当你尝试将一个无法转换为目标类型的对象转换为该类型时,会引发ValueError异常。
int_value = int("abc")  # 这里将会引发ValueError异常 ValueError: invalid literal for int() with base 10: 'abc'

# 2. 参数值无效:当你向函数传递了一个值,而该值无效或不在允许的范围内时,会引发ValueError异常
import math

sqrt_result = math.sqrt(-1)  # 这里将会引发ValueError异常  ValueError: math domain error

# 3. 其他特定函数的异常:某些特定的函数也可能引发ValueError异常,以表明输入值不合法。
# 例如,enumerate()函数中的start参数必须是整数,如果不满足要求,则会引发ValueError异常。
for i, item in enumerate(["a", "b", "c"], start="1"):  # 这里将会引发ValueError异常 TypeError: 'str' object cannot be interpreted as an integer
    print(i, item)

 

标签:错误,多组,my,引发,NameError,处理,print,异常
From: https://www.cnblogs.com/allenxx/p/17572618.html

相关文章

  • 串口AT与数据的混杂接收处理
    linux串口AT与数据的混杂接收处理;fdcom_rs232为串口句柄conf.rs232.baudrate为实际使用的波特率buf_rs232为串口数据缓存数组buf_rs232_len为串口数据缓存实际长度LOG_ERROR为自定义错误打印宏voidrecv_at_rs232(void){ charbuf[1024];//根据实际需要分配大小 intl......
  • (建议收藏)如何处理 openGauss 上遇到的慢 SQL
    (建议收藏)如何处理openGauss上遇到的慢SQL发布于 2022-12-0714:19:154460举报大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来学习在openGauss上遇到慢SQL该怎么办?在数据库的日常使用中,难免会遇到慢SQL,遇到慢SQL本身并不可怕,困难......
  • 异常基础
    1.什么是异常跟java异常(Exception)一样,都是指在程序执行过程中发生的错误或异常情况。当程序出现异常时,会中断正常的执行流程,并转而执行异常处理的逻辑。2.什么情况下触发异常异常可以由多种原因引起,例如:语法错误:代码不符合Python语法规则。运行时错误:在代码执行期间发生了......
  • 欧姆龙plc串门通讯设置转以太网通讯处理器
    捷米特JM-ETH-CX转以太网通讯处理器采用模块化设计,不占用PLC编程口,即上位机软件通过以太网对PLC数据监控的同时,触摸屏可以通过复用接口X2与PLC进行通讯 欧姆龙PLC的通讯口上一般都会插有触摸屏,用以监控PLC的实时数据;而现在,由于项目需求,需要在不影响原触摸屏的通讯......
  • url中的参数带有&连接符号处理
     keyword:url参数 连接符  %26代替&,  %3F代替?   接受页面不需要改动任何, &的asc码为%26. ?的asc码为%3F. 如:toUrlProject.action?url=nonTopicDetailPlanTask.action%3FprojectInfo.id='+@moduleId+'%26menuId=26......
  • java线程超时处理
    Java线程超时处理引言在Java中,线程是一种轻量级的执行单元,用于并发执行代码。在某些情况下,我们可能希望设置一个超时时间来控制线程的执行时间,以避免长时间的阻塞或无限期的等待。本文将介绍如何在Java中处理线程超时的方法,并提供相应的代码示例。方法一:使用Thread.join(longti......
  • TCP/IP协议模型的五层处理流程简介
    TCP/IP是一种分层模型,它将通信协议分解为五个层次,每个层次都有特定的功能和任务。以下是TCP/IP五层的处理流程:应用层(ApplicationLayer):这是TCP/IP模型的最上层,负责处理应用程序的请求和数据。在该层,应用程序(例如浏览器、电子邮件客户端等)与用户进行交互,并将数据传递给下一层。......
  • Luminar Neo - AI图片编辑处理软件mac/win版
    LuminarNeo是一款由Skylum公司开发的全新图像处理软件,它提供了强大的功能和创意工具,使摄影师能够在后期处理中获得无限的创作自由。→→↓↓载LuminarNeomac/win版 LuminarNeo的主要特点和功能。人工智能增强:LuminarNeo利用先进的人工智能技术,提供了自动智能增强功能......
  • 图片预加载需要token认证的地址处理
    1.添加函数修改img的属性;/****@param{*}idName传入的id,获取改img的dom,添加相应的数学*/exportconstproxyImg=(idName)=>{constimg=document.getElementById(idName||'img');consturl=img.getAttribute('authsrc');constrequest=new......
  • VTK 9.2 Qt 5.14 安装及错误处理
    安装注意:编译release和debug,通过切换配置为release和debug,文件都是在cmake的CMAKE_INSTALL_PREFIX指定的文件夹,需要编译完一种后,把这个文件夹改名(比如debug配置,则改名为debug),不然会覆盖。在Qt项目中,出现错误:“无法解析的外部符号__imp_gl***”,“项目-属性-链接器-输入”添加:OpenG......