python - 如何在 python 中常规检查 ValueError?
问题描述
我使用了一个while True:
循环try
和except
语句来错误检查我为我的大学作业提交的程序。在收到我的成绩后,我因使用True
循环而被打分,因为它们显然是“禁止的”并且在 Python 编程中效率低下。
我在大学之前使用 Python 进行的所有编程,我都使用下面的代码样式来捕获可能导致我的程序崩溃的错误。在我标记的特定代码中,我试图确保用户输入是整数,而不是浮点数或字符串。这是代码片段。
question = input('How old are you? ')
while True:
try:
question = int(question)
break
except ValueError:
question = input('Please enter an integer: ')
值得注意的是,我特别标记了,因为我使用了这种方法并入while True
检查整数输入。
这让我想知道;这样做的正确方法是什么?我的标记的反馈让我认为我所做的是一些原始的错误检查方法,但我从来没有遇到过更先进的东西。
如果有人知道“正确和正确的方法”来确保输入是整数,同时放弃使用while True
,我将不胜感激!
解决方案
在这种特定情况下,您可以放弃try-except
:
question = input('Please enter an integer.')
while not question.isdigit():
question = input(f'{question} is not an integer. Please enter an integer.')
question = int(question)
也就是说,我会说您的代码没有任何问题,与此解决方案相比,这种情况实际上是惯用的。
此外,它确实与您的解决方案不同,因为它会检查可以完全转换为整数的用户输入,而您的则接受例如浮点数。
推荐阅读
- c++ - 当我尝试将范围值存储为 8 位的固定宽度整数时,它会显示一些其他值 [ASCII]
- android - Can a Flutter app be proposed on the Huawei AppGallery?
- python - 无法读取使用 soffice 命令转换 pdf 后得到的 .docx 文件
- python - Sqlalchemy:无法执行同步规则(在多对多关系中)
- arrays - 在 WindowsForm 中使用带有 DisplayArray 方法的泛型
- parse-error - ijson 因尾随垃圾解析错误而失败
- node.js - Node.js Socket.io 从不同的名称空间调用函数
- angular - 工具栏/离子按钮外的 Ionic 4 圆形图标仅按钮
- c - 在 C 中动态创建文件名
- reactjs - 带有反应的套接字 io:从服务器发射到特定用户