当前位置: 首页 > news >正文

【Python】异常处理及程序调试

1.异常的基本概念

在运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。其中,一部分“异常”是由开发者直接输入导致,这类错误多数产生的是SyntaxError:invalid syntax(无效的语法),这将直接导致程序无法运行。

常见例子如下:

会弹出语法错误提示

输出TypeError,说明str类型和int类型不能串联。

常见的异常类型

异常描述
NameError试图访问的变量名不存在
IndexError索引超出序列范围引发的错误
Exception常规错误的基类
SyntaxErrorPython语法错误
SystemError一般的解释器系统错误
Warning警告的基类
SyntaxWarning可疑的语法警告
UserWarning用户代码生成的警告

2.异常处理语句

①try…except语句

在Python中,提供了try…except语句捕获并且处理异常,语法格式如下:

try:block1
except[ExceptionName[as alias]]:block2

参数说明如下:

block1:表示可能出现错误的代码块。

ExceptionName[as alias]:可选参数,用于指定要捕获的异常

block2:表示进行异常处理的代码块。这里可以输出固定的信息提示,也可以通过别名输出异常的具体内容。

Python语言使用保留字try和except进行异常处理。语法如下:

try:<语句块1>
except:<语句块2>

如果在except后面指明错误类型的基本语法格式:

try:<语句块1>
except<异常处理类型>:<语句块2>

②try…except…else语句

工作原理是在上一个语句后面加上else子语句。

示例:

a=10
b=0
try:c=b/aprint('c')
except (IOError,ZeroDivisionError),x:print x
else:print("no error")
print("done")

运行结果:

c
noerror
done

③try…except…finally语句

语法格式:

try:block1
except [ExceptionName[as alias]]:block2
finally:block3

示例:

④使用raise语句抛出异常

#!/user/bin/env python3raise Exception("错误信息")

3.使用IDLE和assert语句进行程序调试

(1)使用Python自带的IDLE进行程序调试

①打开IDLE Shell,并在其中单击菜单栏Debug中的Debugger,如图:

之后,会弹出DebugControl的对话框(此时对话框是空白的,如图所示):

②从IDLE Shell中打开想要调试的.py的文件,选中某行,右键设置断点。

③添加断点之后,单击菜单栏Run中的RunModule,运行.py文件

④DebugControl对话框中将显示程序的执行信息。

(2)使用assert语句进行程序调试

语法格式如下:

assert 条件表达式 [,描述信息]

assert语句的作用是:当条件表达式的值为真时,该语句什么也不做,程序正常运行,反之,若值为假,则assert会抛出AssertionError异常。其中,[,描述信息]作为可选参数,用于对条件表达式可能产生的异常进行描述。

通常情况下,assert语句可以和try…except异常处理语句配合使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 记录一次环境的安装
  • 嵌入式Linux系统中LCD屏驱动框架基本实现
  • 【SQL Server】默认端口与自定义端口
  • vulhub:Apache解析漏洞apache_parsing
  • FFmpeg的make install
  • 【反序列化漏洞】serial靶机详解
  • 动态加载第三方库——dlopen
  • HCIP学习作业一 | HCIA复习
  • 在 Magento 2.4.3 中手动下载和安装样本数据
  • WCF 禁止第三方访问,避免泄露元数据信息
  • 【Qt】QMainWindow之菜单栏
  • 【Docker】容器连接
  • 亨廷顿小勇士必看!你的维生素补给站来啦~
  • 使用openpyxl库对Excel条件格式的深度探索
  • 智能巡检企业级域名 SSL 证书
  • CSS3 变换
  • eclipse的离线汉化
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • PHP的Ev教程三(Periodic watcher)
  • Vue官网教程学习过程中值得记录的一些事情
  • 代理模式
  • 基于 Babel 的 npm 包最小化设置
  • 网络应用优化——时延与带宽
  • 我感觉这是史上最牛的防sql注入方法类
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • $(function(){})与(function($){....})(jQuery)的区别
  • (06)金属布线——为半导体注入生命的连接
  • (2)Java 简介
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)fread与fwrite详解
  • (ibm)Java 语言的 XPath API
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (力扣)1314.矩阵区域和
  • (十一)c52学习之旅-动态数码管
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (新)网络工程师考点串讲与真题详解
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一一四)第九章编程练习
  • (转)ObjectiveC 深浅拷贝学习
  • (转)关于多人操作数据的处理策略
  • (转载)从 Java 代码到 Java 堆
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .ai域名是什么后缀?
  • .java 9 找不到符号_java找不到符号
  • .NET : 在VS2008中计算代码度量值
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net环境下的缓存技术介绍