第7章 1 异常处理

bug的由来及分类 p81

字符串形式表示的数字之间也可以比较大小

python 复制代码
import re
age=input('年龄:')
if age>'18':
    print(age)

列表的append操作每次只能添加一个元素:

python 复制代码
lst=[]
lst.append('A')
lst.append('B')
# lst.append('A','B') 错误

python中的异常处理机制 p82

try...except的语法结构:

python 复制代码
try:
	可能会抛出异常的代码
except 异常类型:
	异常处理代码(报错后执行的代码)

代码实例:

python 复制代码
try:
    num1=int(input('请输入一个整数:'))
    num2=int(input('请输入另一个整数:'))
    result=num1/num2
    print('结果:{0:.2f}'.format())
except ZeroDivisionError:
    print('除数为0')

'''
第2个输入为0的时候,会走到except异常分支。
但若输入的不是整数,包含了其它字符,还是会运行报错。
解决方法见下一种语法结构。

若except后面不指定异常名称,则表示捕获全部异常

try...except...except的语法结构:

python 复制代码
try:
	可能抛出异常的代码
except 异常类型A:
	异常处理代码(报错后执行的代码)
except 异常类型B:
	异常处理代码(报错后执行的代码)

代码实例:

python 复制代码
try:
    num1 = int(input('请输入一个整数:'))
    num2 = int(input('请输入另一个整数:'))
    result = num1 / num2
    print('结果:{0:.2f}'.format(result))
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('不能将字符串转为整数')
except BaseException:
    print('未知异常')

try...except...else的语法结构为:

python 复制代码
try:
    可能会抛出异常的代码
except 异常类型:
    异常处理代码(报错后执行的代码)
else:
    没有抛异常要执行的代码

代码实例:

python 复制代码
try:
    num1 = int(input('请输入一个整数:'))
    num2 = int(input('请输入另一个整数:'))
    result = num1 / num2
#    print('结果:{0:.2f}'.format(result))
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('不能将字符串转为整数')
except BaseException:
    print('未知异常')
else:
    print('结果:{0:.2f}'.format(result)) # 把第五航执行成功打印的语句挪到此处,也是可以的

try...except...else...finally的语法结构:

python 复制代码
try:
    可能会抛出异常的代码
except 异常类型:
    异常处理代码(报错后执行的代码)
else:
    没有抛异常要执行的代码
finally:
    无论是否产生异常都要执行的代码

raise关键字的使用 p83

raise:抛出一个异常,从而提醒程序出现了异常情况,程序能够正确的处理这些异常情况

语法结构:

python 复制代码
raise Exception类型(异常描述信息)

代码实例:

python 复制代码
try:
    gender=input('请输入您的性别:')
    if gender!='男' and gender!='女':
        raise Exception('性别只能是男或女')  # 此处抛出异常,然后被第七行捕获
    else:
        print('您的性别是:{0}'.format(gender))
except Exception as e:
    print(e)

Python中常见的异常类型 p84

异常类型 描述说明
ZeroDivisionError 当除数为0时,引发的异常
IndexError 索引超出范围所引发的异常
KeyError 字典取值时key不存在的异常
NameError 使用一个没有声明的变量时引发的异常
SyntaxError Python中的语法错误
ValueError 传入的值错误
AttributeError 属性或方法不存在的异常
TypeError 类型不合适引发的异常
IndentationError 不正确的缩进引发的异常

代码实例:

python 复制代码
# ZeroDivisionError
#print(10/0)

# IndexError
#lst=[10,20]
#print(lst[2])

# KeyError
#d={'a':1}
#print(d['b'])

# NameError
#print(a)

# SyntaxError
#print('a)

# ValueError
# int('a')

# AttributeError
#i=10
#print(i.name) 整数没有这个属性

# TypeError
#print('hello'+123)

# IndentationError
    print('不在if里面就不能缩进')

PyCharm的程序调试 p85

1、设置断点:点击行号,设置断点到对应位置处

2、进入代码调试窗口:a.点击右上角小虫子 b.shift+f9 c.右键+debug main

下面会生成四个窗口:变量查看窗口、调试控制窗口、线程控制窗口、程序控制窗口

本章总结及章节选择题 p86

若except后面不指定异常名称,则表示捕获全部异常

相关推荐
半兽先生4 分钟前
大模型技术开发与应用——5.大模型Agent开发(CrewAI)
大数据·人工智能·python·机器学习·ai
眼泪划过的星空7 分钟前
快速了解LangGraph:构建智能Agent工作流的核心框架
人工智能·python·langchain
极客先躯12 分钟前
高级java每日一道面试题-2026年05月11日-实战篇[Docker]-如何容器化金融产品推荐系统?
java·运维·docker·容器·金融·高级面试·金融产品推荐系统
朱容zr33313329 分钟前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化
IsSh9nj6q1 小时前
Python全栈应用搭建神器magic-dash .新版本介绍
开发语言·python·dash
知彼解己1 小时前
Eclipse Temurin:企业级 Java JDK 发行版的最佳实践
java·ide·eclipse
NutShell Wang1 小时前
Vite 8.1 深度拆解:Rolldown 统一打包器如何终结前端构建的「双引擎时代」
前端·rust·开源·vite·开发者工具·vibe coding
朱容zr3331331 小时前
请解释“回表”的概念。
java·前端·数据库
不吃辣4901 小时前
vibe coding | 如何做一个 AI 音乐生成工具?
java·人工智能·后端·ai·ai编程
Cachel wood1 小时前
hands-on-modern-rl:动手学强化学习策略梯度reinforce
开发语言·python