Python技巧:如何避免数据输入类型错误

news2024/10/4 17:30:18

假设我们用Python编写模拟银行操作的游戏,需要处理用户存款的输入,然后计算总余额。你可能会遇到一些常见的问题,比如用户输入的不是数字,而是字符或者列表,导致程序报错而终止。

如何避免上述情况的发生,更多优雅地处理用户输入的数据,而不让程序崩溃呢?此时,我们就需要用到while循环和try-except语句来处理报错。

一、示例分析

在下面的代码中,如果我们直接用 input() 来获取用户的输入,再将这个输入加到余额上,可能会遇到一个类型错误。

balance = 100.0
num = input("请输入存款金额:")
balance += num  # 这里会报错,因为num是字符串类型
print("当前余额:", balance)

错误信息如下所示。这是因为 input() 函数返回的是字符串,而我们尝试将它与数字(浮点数)相加时,就会造类型不匹配的错误,因为Python语法规则中是 不允许不同类型的数据直接进行相加运算的。

TypeError: unsupported operand type(s) for +=: 'float' and 'str'

二、解决方案

1. 解决方案一:将输入转换为浮点数

我们可以通过 float() 函数将用户的输入从字符串转换为浮点数,这样可以统一数据类型。修改后的代码如下所示:

balance = 100.0
num = float(input("请输入存款金额:"))  # 把输入转换为浮点数
balance += num
print("当前余额:", balance)

这样基本上就能解决数据类型的问题,但是如果用户输入了非数字字符(比如字母),程序仍然会报错。

当用户意外输入非数字字符时,例如输入字母 "a",Python 会抛出值错误(ValueError),因为字母无法转换为浮点数。错误信息如下:

ValueError: could not convert string to float: 'a'

因此,这种常用操作并不能完成解决我们遇到的问题,这种情况怎么办呢?这时,我们就需要使用我们的第二种文案了:

2.解决方案二:使用 try-except 处理异常

为了避免上述类型不区配的错误,我们可以使用 try-except 语句来捕获这个异常,并给用户返回一个友好的提示信息。这样可以避免程序崩溃,同时提醒用户重新输入。示例代码如下:

balance = 100.0

while True:
    try:
        num = float(input("请输入存款金额:"))
        break  # 如果转换成功,跳出循环
    except ValueError:
        print("输入无效,请输入一个数字。")  # 捕获值错误并提示用户

balance += num
print("当前余额:", balance)

上述代码中,我们用try ... except来截获数据类型不匹配的报错,然后用一个while循环,在输入无效数据后再次提示输入金额信息,而不是直接结束程序,这样的设计更加科学。

这样,当用户输入字母时,程序会提示用户“输入无效,请输入一个数字。”并要求重新输入。

用户输入数字时,数字将会被正确转换并加到余额中。

三、学后总结

使用 try-except 语句不仅可以让程序更健壮,还可以提升用户体验,避免因为错误的输入导致程序崩溃。

这个实用技巧可以用在需要获取用户输入并进行处理时,有效减少报错,使我们的程序更加pythonic。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内存对齐

内存对齐的基本规则是:只能在自己所占字节的整数倍的内存地址上存放(结构体也是如此)。 假如定义一下变量: 对应的存储格式为: 由于变量C占四个字节,所以从12开始。 对于整个结构体而言:结构体…

【Web】portswigger 服务端原型污染 labs 全解

目录 服务端原型污染 为什么服务器端原型污染更难检测? 通过受污染的属性反射检测服务器端原型污染 lab1:通过服务器端原型污染进行权限提升 无需污染属性反射即可检测服务器端原型污染 状态代码覆盖 JSON 空格覆盖 字符集覆盖 lab2:检测没有污染属性反射的…

Pikachu-xss防范措施 - href输出 js输出

总体原则: 输入做过滤,输出做转义 过滤:根据业务需要进行过滤,如:输入点要求输入手机号,则只允许输入手机号格式的数字; 转义:所有输出到前端的数据,都根据输出点进行转…

银河麒麟V10如何快速进入单用户模式?

银河麒麟V10如何快速进入单用户模式? 1. 进入GRUB菜单2. 编辑启动项3. 登录系统4. 修改启动参数5. 退出单用户模式 💖The Begin💖点点关注,收藏不迷路💖 银河麒麟高级服务器操作系统V10在系统维护或故障排查时&#xf…

70.【C语言】动态内存管理(重点)(3)

承接69.【C语言】动态内存管理(重点)(2)文章 目录 4.calloc函数 cplusplus网的翻译 提炼要点 使用 5.recalloc函数 使用说明 作用 调整内存空间的几种情况 1.原有空间之后有足够大的空间 2.原有空间之后没有足够大的空间 建议 代码 用recalloc函数来实现malloc函…

学习C语言(22)

整理今天的学习内容 1.常见的动态内存的错误 (1)对NULL指针进行解引用操作 (2)对动态开辟空间的越界访问 (3)对非动态开辟内存使用free释放 (4)使用free释放一块动态开辟内存的一部…

抖音巨量千川涨粉操作流程,值得学习

抖音巨量千川涨粉操作流程值得学习:rjxbb0616 1、找到抖音合作码(在抖音APP里:我-右上角三条杠-设置-账号与安全-我的合作码)复制合作码发给合作商。 2、合作商在千川平台上发布一个虚拟的热门作品到抖音,然后在千川账户建立目标账…

mysql连接池

MySQL连接池 什么是数据库连接池? ​ 定义:数据库连接池(Connection pooling)是程序启动时建立一定数量的数据库连接,并将这些连接组成 一个连接池,由程序动态地对池中的连接进行申请,使用&am…

HTML:相关概念以及标签

目录 什么是网页? 什么是HTML语言? 语法规范 HTML基本结构标签 DOCTYPE,lang以及字符集 HTML常用标签 5>图像标签(重要) 除此之外还有几个调整图片属性的标签 图像标签总结 什么是网页? 我们平时使用电脑和手机都是离不开网站和网页的,那么什么是网页呢?什么又是网…

Yolov8改进轻量级网络Ghostnetv2

1,理论部分 轻量级卷积神经网络 (CNN) 专为移动设备上的应用程序而设计,具有更快的推理速度。卷积运算只能捕获窗口区域中的局部信息,这会阻止性能进一步提高。将自我注意引入卷积可以很好地捕获全局信息,但会在很大程度上阻碍实际速度。在本文中,我们提出了一种硬件友好…

【技术分析】嘉楠科技SoC芯片K230

概述 K230是嘉楠科技Kendryte系列AIoT芯片中的最新一代SoC芯片,该芯片采用全新的多异构单元加速计算架构,集成的玄铁C908具有2个高能效RISCV计算核心,内置新一代KPU(Knowledge Process Unit)智能计算单元,…

【cpp/c++ summary 工具】 Hunter 报错 CMake hunter error: Unexpected MSVC_VERSION

原因:使用的MSVC编译器版本较高,而Hunter版本较低,可在https://github.com/cpp-pm/hunter/releases配置高版本Hunter # HunterGate( # URL "https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz" # SHA1 "33…

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:

使用git clone 时报错unable to access xxx: SSL certificate problem: 这个报错通常是由于SSL证书问题引起的。通常可以按照以下步骤进行排查: 检查网络连接:确保你的网络连接正常,可以访问互联网。尝试使用其他网站或工具测试网络连接是否正…

netty之Netty集群部署实现跨服务端通信的落地方案

前言 在一些小型用户体量的socket服务内,仅部署单台机器就可以满足业务需求。但当遇到一些中大型用户体量的服务时,就需要考虑讲Netty按照集群方式部署,以更好的满足业务诉求。但Netty部署集群后都会遇到跨服务端怎么通信,也就是有…

【PS】删除自定义形状,添加自定义形状

删除自定义形状 在这里选择删除形状为灰色的时候,是不能直接删除的,需要打开形状窗口后才能删除。 找到形状窗口,打开它 然后就可以删除形状了。 导入形状 右键,导入形状 选择你要导入的形状包(我这个是某宝买…

Stable Diffusion绘画 | 来训练属于自己的模型:秋叶训练器使用

花了不少时间搜索尝试,都没有找到解决上一篇文章遗留问题的解决方案,导致无法使用 cybertronfurnace 这个工具来完成炼丹,看不到炼丹效果。 但考虑到,以后还是要训练自己的模型, 于是决定放弃 cybertronfurnace&…

数据结构与算法——Java实现 28.二叉树的锯齿形层序遍历

努力成为你想要成为的那种人,去奔赴你想要的生活 —— 24.10.4 103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推&#xff…

【Unity】双摄像机叠加渲染

一、前言 之前我在做我的一个Unity项目的时候,需要绘制场景网格的功能,于是就用到了UnityEngine.GL这个图形库来绘制,然后我发现绘制的网格线是渲染在UI之后的,也就是说绘制出来的图形会遮盖在UI上面,也就导致一旦这些…

第十八章(数据在内存中的储存)

1. 整数在内存中的存储 2. ⼤⼩端字节序和字节序判断 3. 浮点数在内存中的存储 我本将心向明月,奈何明月照沟渠正文开始 一、.整数在内存中的储存 整数的2进制的表示方法有三种 1.原码 2.反码 3.补码 这里在第十章我们有详细讲解,有需要的同学可以自…

网络编程项目框架内容

基于TCP的云端书阅管理系统 通过网络实现图书借阅网站,包括服务器与客户端,客户端与服务器是基于TCP连接。 客户端描述:客户端运行会与服务器端进行连接,连接成功后,显示注册登录界面。此时,客户端可以选…