首页 > Python资料 博客日记
Python教程:异常捕捉与代码重构
2024-08-15 15:30:02Python资料围观56次
异常
pYthon使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让python不知所错的错误时,他都会创建一个异常对象。当你编写了处理改异常的代码,该程序将继续运行;如果你未对异常进行处理,程序停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except代码块处理的。try-except代码块让python执行指定的操作,同时告诉python发生异常时怎么办。
1.处理ZeroDivisionError异常
Python无法按照你的要求做时,就会创建这种对象。在这种情况下python会停止运行程序,并指出应发了那种异常。
2.使用 try-except代码块
当我们认为可能发生错误时,可编写一个try-except代码块来处理可能引发的异常,让你的python尝试运行一些代码,并告诉它这些代码指定的异常,改怎么办?
try:
print(5/0)
except ZeroDivisionError:
print("you can't division by zero ...")
如果try-except代码后面还有其他代码,程序将接着运行,因为已经告诉了python如何处理这种问题。
3.使用异常避免搞崩溃
发生错误时,如果程序还有工作没有完成,妥善的处理错误就尤为重要了。比如说,要求用户输入的程序中,如果程序能够有效处理无效输入,而不至于崩溃。
while True:
first_number = input("\nFrist_number:")
if first_number == "q":
break
second_number = input("\nsecond_nmuber:")
if second_number == "q":
break
answer = int(first_number)/int(second_number)
print(answer)
这样的程序看起来貌似没有什么问题,但是如果用户输入的内容不是数字或者“q”是将会报错,并且使得程序崩溃。
while True:
first_number = input("\nFrist_number:")
if first_number == "q":
break
second_number = input("\nsecond_nmuber:")
if second_number == "q":
break
try:
answer = int(first_number)/int(second_number)
except ZeroDivisionError:
print("哥们,别逗..")
except ValueError:
print("你是猪吗?..")
else:
print(answer)
这样实现了一次登录后的数据记录。
重构
有时候我们有这样的需求:代码能够正常的运行,那可做进一步的修改——将代码划分为一系列完成具体工作的函数。这样的过程被称为重构。
就1.2节的低吗,我们来完成重构。
要重构以上程序,可将其大部分逻辑放到一个或多个函数中。以上代码重点是实现问候客户,因此我们将其放到一个greet_user()的函数中:
import json
def greet_user():
filename = "username1.json"
"""问候用户,并指定其名字"""
try:
with open(filename,"r",encoding=("utf-8")) as f_obj:
usernames = json.load(f_obj)
except FileNotFoundError:
usernames = input("请输入您的名字?")
with open(filename,"w",encoding=("utf-8")) as f_obj:
json.dump(usernames,f_obj)
else:
print("欢迎%s登录系统..." %(usernames))
greet_user()
上述greet_user函数不仅仅是问候用户,还有存储了用户名获取,没有存储输入的功能。
下面我们再来重构greet_函数,让他不执行这么多任务。为此,我们首先将获取存储的用户名的代码移植到另一个函数中。
import json
def get_stored_username():
'''如果存储了用户,就获取它'''
filename = "username1.json"
try:
with open(filename,"r",encoding=("utf-8")) as f_obj:
usernames = json.load(f_obj)
except FileNotFoundError:
return None
else:
return usernames
def greet_user():
"""问候用户并指出其名"""
usernames = get_stored_username()
if usernames:
print("欢迎%s登录系统..." % (usernames))
else:
usernames = input("请输入您的名字?")
filename = "username1.json"
with open(filename,"w",encoding=("utf-8")) as f_obj:
json.dump(usernames,f_obj)
greet_user()
上述代码已经将存储用户的代码提取出来,通过返回值来确定是否需要用户输入姓名。此时呢,还有一个代码块需要我们重构,就是:没有存储用户名提示时输入用户名的代码?
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:531509025
import json
def get_stored_username():
'''如果存储了用户,就获取它'''
filename = "username2.json"
try:
with open(filename,"r",encoding=("utf-8")) as f_obj:
usernames = json.load(f_obj)
except FileNotFoundError:
return None
else:
return usernames
def get_new_username():
'''提示用户输入用户名'''
usernames = input("请输入您的名字?")
filename = "username2.json"
with open(filename, "w", encoding=("utf-8")) as f_obj:
json.dump(usernames, f_obj)
def greet_user():
"""问候用户并指出其名"""
usernames = get_stored_username()
if usernames:
print("欢迎%s登录系统..." % (usernames))
else:
get_new_username()
greet_user()
如此一来,每一个函数都执行了单一而清晰的任务。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj