繁体   English   中英

捕捉输入错误

[英]catching an input errorr

我做了一个简单的计算器,我试图用 try 捕捉错误,除了 function 但由于某种原因它没有捕捉到错误。 错误是当我在 num1 或 num2 输入中输入除数字以外的任何内容时。 我收到一个 ValueError,但我将 ValueError 放在了 except 块中,但它仍然没有捕获它。 我希望它捕获错误并打印无效数字,而不是在 pycharm 中实际给我一个错误。

num1 = float(input("give a number"))
op = input("give an operator")
num2 = float(input("give a number"))


try:
    if op == "/":
     print(num1/num2)
    elif op == "*":
     print(num1*num2)
    elif op == "-":
     print(num1-num2)
    elif op == "+":
     print(num1+num2)
    else:
     if op != "/*-+":
         print("invalid operator")
except ValueError:
    print("invalid number")

这是它给我的错误

give a number+
Traceback (most recent call last):
  File "C:/Users/Kalen/PycharmProjects/m/m.py", line 3, in <module>
    num1 = float(input("give a number"))
ValueError: could not convert string to float: '+'
num1 = input("give a number")
op = input("give an operator")
num2 = input("give a number")

try:
    num1=float(num1)
    num2=float(num2)
    if op == "/":
     print(num1/num2)
    elif op == "*":
     print(num1*num2)
    elif op == "-":
     print(num1-num2)
    elif op == "+":
     print(num1+num2)
    else:
     if op != "/*-+":
         print("invalid operator")
except ValueError:
    print("invalid number")

试试这个,希望它能按预期工作。

您试图在 catch 块之前将输入转换为浮点数,因此错误出现在 catch 块之前并且未被捕获。 在 catch 块之外读取输入,但稍后仅在 catch 块内将它们转换为浮点数。

更好的是,不要尝试强制转换和抛出 ValueErrors,而是首先检查字符串是否实际上是一个数字。 使用string.isdigit()执行此操作。

通过抛出和捕获异常来验证输入是不好的做法。 一般的建议是检查和验证您可以合理预期的各种条件,并且只在您无法预见的情况下捕获和抛出异常。 当您编写 try-catch 子句时,您假设某些错误可能由于某些原因超出您的控制范围而发生,但您不知道原因、位置或方式。 抛出异常是针对错误的,而不仅仅是针对正常可预见的程序流。

if not (num1.isdigit() and num2.isdigit()):
      print("invalid number")
else:
      // proceed


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM