Python中异常处理
高级语言通常都配置了一套try...except...finally的错误处理机制。
1、我们先看一个try的机制
try:
res=1/0
except ZeroDivisionError as e:
print("出错了,除数不能为0",e)
运行结果为:
出错了,除数不能为0 division by zero
当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果只选出错,则后续代码不会执行
而是直接跳转至错误处理代码,即except语句块 2、另外一个例子:
l=[]
dic={}
try:
print(dic['name'])
print(l[-1])
except KeyError as e:
print('字典key不存在',e)
except IndexError as e:
print("出错了,下标越界",e)
except Exception as e:#捕捉所有的异常
print("未知异常",e)
else:
print("没有出现异常...")
finally:#不管出现 异常和不出现异常,都会执行
print("什么时候执行finally")
输出结果:
字典key不存在 'name'
什么时候执行finally
key不存在,我们就抛出一个keyerror的错误,下标越界,我们就抛出一个indexerror的错误
如果没有错误,就在except语句块后面加一个else,当没有错误发生时,就自动执行else
finally是不管什么时候都执行的语句
3、记录错误
如果不捕获错误,自然可以让python解释器来打印出错误堆栈,但是程序也被结束了,既然我们能捕获错误,就
可以把错误打印出来,然后分析错误,同时让程序执行下去
Python内置的loging模块可以记录错误
import logging
def foo(s):
return 10 / int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except Exception as e:
logging.exception(e)
main()
print('END')
输出结果
END
ERROR:root:division by zero
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/记录错误.py", line 12, in main
bar('0')
File "C:/Users/zyq64/PycharmProjects/1018/day10/记录错误.py", line 8, in bar
return foo(s) * 2
File "C:/Users/zyq64/PycharmProjects/1018/day10/记录错误.py", line 5, in foo
return 10 / int(s)
ZeroDivisionError: division by zero
同样是出错,但是程序打印完错误信息后会继续执行,并正常退出
4、主动抛出错误 raise
try:
10 / 0
except ZeroDivisionError:
raise ValueError('input error!')
输出结果:
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/异常处理.py", line 38, in <module>
10 / 0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/异常处理.py", line 40, in <module>
raise ValueError('input error!')
ValueError: input error!
Python中异常处理的更多相关文章
- python中异常处理之esle,except,else
异常是指程序中的例外,违例情况.异常机制是指程序出现错误后,程序的处理方法.当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理. python中使用try...except语句捕获异常, ...
- python中异常处理--raise的使用
https://www.cnblogs.com/zhangyin6985/p/7229553.html 当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了rai ...
- Python基础---python中的异常处理
Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...
- Python 中的面向对象和异常处理
在之前我们已经说过了 Python 中内置的主要的几种对象类型,(数,字符串,列表,元组和字典).而面向对象的核心人物还没出场呢 .那么我们常说的对象是什么类型的呢,其实他的类型就是“类”.继承封装和 ...
- Python中的异常处理 -- (转)
python中的异常 异常是指程序中的例外,违例情况.异常机制是指程序出现错误后,程序的处理方法.当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理. Exception类是常用的异 ...
- python中的异常处理机制
python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...
- Python中常见的异常处理
异常和错误 part1:程序中难免出现错误,而错误分成两种 1. 语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范一 if # 语法错误示范二 d ...
- python基础20 -------python中的异常处理
一.python程序中的会出现的错误. 1.语法错误:这种错误根本过不了python解释器的语法检测阶段,必须在程序执行之前进行改正. 2.逻辑错误:这种错误虽然过了语法检测阶段但是程序在执行的过程中 ...
- 第五章 python中的异常处理
每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...
随机推荐
- scrapy item pipeline
item pipeline process_item(self, item, spider) #这个是所有pipeline都必须要有的方法在这个方法下再继续编辑具体怎么处理 另可以添加别的方法 ope ...
- mongodb认识
MongoDB安装 一.软件的获取地址 1.使用本安装文档提供的安装软件 本安装文档提供的软件为window版本的64位MongoDB的安装包 2.在官网上下载所需的安装软件 下载地址:https:/ ...
- Java 多重catch语句的具体使用介绍
某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...
- 什么是软件开发工具包(SDK)
开发一个软件,需要经过编辑.编译.调试.运行几个过程. 编辑:使用编程语言编写程序代码的过程. 编译:如上一节所讲,就是将编写的程序进行翻译. 调试:程序不可能一次性编写成功,编写过程中难免会出现语法 ...
- 【javascript】script标签的async异步解析
<script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染 ...
- demo1:会下蛋的机器人
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ubuntu安装git
安装git,输入sudo apt-get install git 这是unbutu安装东西的简单命令啊 apt-get
- 使用mybatis-generator插件自动生成代码的步骤
注意:首先你这个项目一定要是个maven项目 1.首先你需要在pom文件中导入相关的依赖,如下代码 <plugin> <groupId>org.mybatis.generato ...
- jquery简易tab切换
切换tab 使用eq()函数 eq() 方法将匹配元素集缩减值指定 index 上的一个. //为项目 3 设置红色背景 <ul> <li>list item 1</li ...
- flutter key
随意点开一个Widget,就会发现,可以传递一个参数Key.那这个Key到底是干啥子,有什么用呢? Flutter是受React启发的,所以Virtual Dom的diff算法也参考过来了(应该是略有 ...