当程序深处一个复杂的函数调用链中抛出异常时,如何能快速定位问题的根本原因?又该如何创建一种专属的“错误信号”,来清晰明确地表达你自定义的业务逻辑错误(比如“用户余额不足”、“数据格式不符合规范”)?
try: print(1)except Exception as e: print(e)else: print('没有异常')
try: f = open('python.txt', 'r', encoding='utf-8')except Exception as e: print(e)else: content = f.readlines() print(content, end='') f.close()
finally表示的是无论是否异常都要执行的代码,例如关闭文件、关闭数据库连接。
try: f = open('python.txt', 'r')except: f = open('python.txt', 'w')else: print('没异常')finally: print('关闭文件') f.close()
需求:
① 尝试只读方式打开python.txt文件,如果文件存在则读取文件内容,文件不存在则提示用户即可。
② 读取内容要求:尝试循环读取内容,读取过程中如果检测到用户意外终止程序,则except捕获
import timetry: f = open('python.txt', 'r', encoding='utf-8') try: while True: content = f.readline() if len(content) == 0: break time.sleep(3) print(content, end='') except: # Ctrl + C(终端里面,其代表终止程序的继续执行) print('python.txt未全部读取完成,中断了...') finally: f.close()except: print('python.txt文件未找到...')
python.txt内容:
程序还没运行完后点击暂定后输出结果:
在Python中,抛出自定义异常的语法为raise 异常类对象。
需求:密码长度不足,则报异常(用户输入密码,如果输入的长度不足6位,则报错,即抛出自定义异常,并捕获该异常)。
原生方法:
def input_password(): password = input('请输入您的密码,不少于6位:') iflen(password) < 6: raise Exception('您的密码长度少于6位') return # 如果密码长度正常,则直接显示密码 print(password)input_password()
面向对象抛出自定义异常:
class ShortInputError(Exception): # length代表输入密码长度,min_length代表ShortInputError最小长度 def __init__(self, length, min_length): self.length = length self.min_length = min_length # 定义一个__str__方法,用于输出字符串信息 def __str__(self): return f'您输入的密码长度为{self.length}, 不能少于{self.min_length}个字符'try: password = input('请输入您的密码,不少于6位:') if len(password) < 6: raise ShortInputError(len(password), 6)except Exception as e: print(e)else: print(f'输入完成,您的密码是{password}')
今日学习完毕,课后作业:
简易文件读取与数据转换,题目要求:
请编写一个程序,尝试完成以下操作:
(1)提示用户输入一个文件名。
(2)尝试打开该文件,并读取文件中的第一行内容。
(3)尝试将读取到的内容转换为一个整数。
(4)打印转换成功后的整数。
程序需要处理以下两种可能的错误情况:
① 用户输入的文件不存在。(引发 FileNotFoundError)
② 文件中的内容无法转换为整数。(引发 ValueError)