自学内容网 自学内容网

python进阶——快速掌握 【异常处理】(内附代码)

一、异常处理机制

异常的定义程序运行时发生的不正常事件。

使用异常处理机制,捕获异常,处理异常。

异常分为:内置异常、自定义异常。

1.1 内置异常处理

异常处理是对异常进行捕获、抛出、处理,提高程序健壮性的机制。

算法的设计要求:正确性、可读性、健壮性、高效率、低存储

使用关键字try except finally else组合成不同的处理方式,其中try和except是核心。

简单模式:

try:
    代码1
except:
    代码2
    
例子:
try:
    print(name)
except:
    print("命名错误")

捕获多个异常结构

try:
    代码块
except XXX:
    代码2
except XXX:
    代码3
except XXX:
    代码4
    
例子:
try:
    print('hello' + 1234)
except NameError:
    print("命名错误")
except TypeError:
    print("类型错误")
except IndentationError:
    print("缩进错误")
    
try:
    print('hello' + 1234)
except (NameError, TypeError, IndentationError):
    print("有错误")
    
try:
    print('hello' + 1234)
except Exception as e:
    print(f"有{e}错误")

try...except...else结构

语法:
try:
    代码1
except:
    代码2
else:
    代码3
    
例子:
try:
    a = 3
    b = 0
    c = a/b
except Exception as e:
    print(f"{e}错误")
else:
    print(c)

 try...except...else...finally结构

语法:
try:
    代码1
except:
    代码2
else:
    代码3
finally:
    代码4
    
例子:
try:
    a = 3
    b = 1
    c = a/b
except Exception as e:
    print(f"{e}错误")
else:
    print(c)
finally:
    print("不用管我,异常还不是不异常,我都会输出")

练习:

1、使用异常处理,定义一个函数func(listinfo)listinfo为列表,

listinfo = [133, 88, 24, 33, 232, 44, 11, 44], 返回列表中小于100且为偶数的数。

def func(listinfo):
    try:
        ret=filter(lambda x:x<100 and x%2==0,listinfo)
    except Exception as e:
        print(e)
    else:
        print(list(ret))
listinfo=[133,88,24,33,123,44,11,44]
func(listinfo)

1.2 自定义异常

                自定义异常——可以根据自己的实际需求做异常判断。

                raise   手动抛出异常——内置异常、自定义异常都可以。

1.自定义异常必须继承    Exception  类

语法格式:
class MyException(BaseException):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg
        
try:
    raise MyException('异常消息字符串')
except MyException as e:
    print(e)

1.3  demo2:日志的简单应用

在python中,记录日志使用logging库,日志的级别从高到低分别为:

  1. CRITICAL:系统崩溃级别的错误,必须立即处理
  2. ERROR:运行时的错误,可能导致程序无法正常运行
  3. WARNING:警告信息
  4. INFO:信息性消息,程序正常运行
  5. DEBUG:详细信息,通常在诊断问题时有用
import logging
# 设置日志的打印级别
# logging.basicConfig(level=logging.DEBUG)
logging.critical('这是一个critical信息')
logging.error('这是一个error信息')
logging.warning('这是一个warning信息')
logging.info('这是一个info信息')
logging.debug('这是一个debug信息')
# 向指定的日志文件里去打印日志信息
import logging
# logging.basicConfig(filename='./app.log')
# logging.warning('这是一个warning信息')

# logging.basicConfig(filename='./app.log', level=logging.DEBUG, filemode='a',
#                     format='%(name)s - %(levelname)s - %(message)s')
# logging.warning('这是一个warning信息')

# %(name)s    日志记录器的名字
# %(levelname)s    日志级别
# %(asctime)s    时间
# %(message)s    消息本身


原文地址:https://blog.csdn.net/weixin_56261190/article/details/143777900

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!