首页 > 编程语言 >python系列 - 异常处理

python系列 - 异常处理

时间:2023-02-20 11:14:22浏览次数:37  
标签:系列 python except try finally strip print 异常

错误与异常

通常来说,程序中的错误至少包含两种:一种是语法错误,另一种则是异常
语法错误:代码不符合编程规范,无法被识别与执行
异常:程序语法正确且可以被执行,但执行过程中遇到错误,常见例子:ZeroDivisionErrorNameErrorTypeError

异常处理

except

通常使用try...except来解决

# 默认输入两个整型数字
try:
    s = input('please enter two numbers separated by comma: ')
    num1 = int(s.split(',')[0].strip())
    num2 = int(s.split(',')[1].strip())
    ... 
except ValueError as err:
    print('Value Error: {}'.format(err))

print('continue')

若输入a,b则会抛出异常
image.png


注意:
except block只接受与其匹配的异常类型并执行,若程序抛出的异常不匹配,那么程序同样也会终止并退出


还是上述代码,只输入1,程序就会直接终止并退出
image.png
直接在except中声明异常类型,很难覆盖到所有异常类型,更通常的做法是在最后一个except中声明处理的异常是Exception
Exception是其他所有非系统异常的基类,可以匹配任意非系统异常

try:
    s = input('please enter two numbers separated by comma: ')
    num1 = int(s.split(',')[0].strip())
    num2 = int(s.split(',')[1].strip())
    ...
except Exception as err:
    print('Value Error: {}'.format(err))

print('continue')

image.png
或者,直接在except后省略异常类型,这表示与任意异常匹配(包括系统异常等

try:
    s = input('please enter two numbers separated by comma: ')
    num1 = int(s.split(',')[0].strip())
    num2 = int(s.split(',')[1].strip())
    ...
except :
    print('all error')

print('continue')

image.png


注意:
存在多个except block时,最多只有一个except block会被执行(若多个except声明的异常类型都与实际相匹配,那么只有最前面的except block会被执行)


finally

finally通常和try、except放在一起使用;finally中的语句都会被执行
举个栗子:文件读取

import sys
try:
    f = open('file.txt', 'r')
    .... # some data processing
except OSError as err:
    print('OS error: {}'.format(err))
except:
    print('Unexpected error:', sys.exc_info()[0])
finally:
    f.close()

即无论文件读取成功还是失败,finally中的语句——关闭文件流都会被执行!!!
finally中,通常放一些无论如何都要执行的语句

自定义异常

内置异常无法满足需求
让异常更加详细可读、增加一些异常类型的其他功能
(大多数情况下,内置异常就够用了)

异常使用场景

不确定某段代码能否成功执行,那么这里可以加上异常处理,比如:数据库连接、读取等

标签:系列,python,except,try,finally,strip,print,异常
From: https://www.cnblogs.com/mooii/p/17136609.html

相关文章

  • Python爬虫通用代码框架代码示例
    刚开始入门学习python爬虫会遇到各种各样的问题,如果以当时的学识想必处理起来也十分困难,那么,如果你拥有良好的编程习惯会让你轻松很多。当我们在使用Requests库时经常遇到......
  • 说透中台 ---- 系列文章
    【005】说透中台 说透中台(答疑篇)--学习笔记说透中台(落地篇三)--学习笔记说透中台(落地篇二)--学习笔记说透中台(落地篇一)--学习笔记说透中台(概念篇)--学......
  • Python正则替换请求头格式代码
    有时候请求网站的时候需要携带请求头,从浏览器扒下来的请求头手动操作很不方便,代码类似如下:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,......
  • python 二分查找算法
    python二分查找算法 楔子如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?l=[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,......
  • opengauss节点异常无法启动-记录
    问题描述:Opengauss1主2备环境,反馈数据库连不上了查看原主一直在starting主备断了,新主只和omm3有链接后台不停拉起宕掉问题处理:手动停止omm1,并拉起,数据节点的日志......
  • Python爬虫Scrapy框架是什么?
    之前我们有谈到过有关爬虫的两种爬虫方式,一种是静态的利用Requests+bs4,而另一种就是利用Scrapy框架来进行的专业级的数据抓取。一、什么是Scrapy框架?那么什么是Scrapy框......
  • Pycharm cannot set up a python SDK
    一、问题背景进入Pycharm后,打开之前的项目,打开Pycharm→file→settings→projectinterpreter,按照下图1选择配置之后,点击【OK】会出现报错,如图2我的环境上有很多之前的包......
  • Python——while循环
    1.while循环结构格式:while条件:执行语句1……执行语句2……例:#无限循环死循环whileTrue:print('条件是真的!')例:i=0#创建一个计数的变量whi......
  • python基于telnet验证的交换机配置导出打包脚本
    前置条件python3.10需要在配置文件输入的主机上起一个tftp服务交换这里是锐捷交换机这里的认证协议是telnet需要准备一个交换机IP地址的文件供脚本读取代码部分im......
  • 异常02-捕获和抛出异常
    异常处理机制抛出异常捕获异常异常处理的5个关键字:try、catch、finally、throw、throwspackagecom.exception.demo01;publicclassDemo01{publicstat......