【问题标题】:Why I can't use if statements in except statements?为什么我不能在 except 语句中使用 if 语句?
【发布时间】:2020-01-22 12:28:05
【问题描述】:

为什么我不能在 except 语句中添加 if 语句?

我想在输出中显示这两种形式的错误:

try:
    t = int(input("How time need: "))
except ValueError:
    if type(t) == float:
        print(">>> you should give a int number (you given float) <<<\n")
    elif type(t) == str:
        print(">>> you should give a int number (you given str) <<<\n")

【问题讨论】:

  • 为什么你不能这样做?错误是什么? t 是什么?
  • 为什么要使用exceptifelif 子句将使用该逻辑捕获异常。
  • @CeliusStingher 一般来说,只运行代码并只在生成异常时才担心异常会更快。如果不是,您只是保存了两个分支。
  • 你可以;那不是你的问题。 t == x 不是检查 t 是否是 x 类型的值的方法。

标签: python if-statement except statements


【解决方案1】:

我认为您的问题不在于您不能将if 放入您的except。您提供的代码应该可以正常运行。但是,它不会做你认为它做的事情。我怀疑您的代码包含以下内容:

t = input('>>>')

在这种情况下,t 将始终是一个字符串。但是如果你说

if t == float:
    print(">>> you should give a int number (you given float) <<<\n")
elif t == str:
    print(">>> you should give a int number (you given str) <<<\n")

这不会打印任何内容。为什么? t 不等于字符串,它是字符串类型的对象。所以改为检查:

if isinstance(t, float):
    print(">>> you should give a int number (you given float) <<<\n")
elif isinstance(t, str):
    print(">>> you should give a int number (you given str) <<<\n")

【讨论】:

  • 哦,男孩,很好地阅读了那里潜在的 XY 问题。我假设t 已经是type(x) 一些x = input()
【解决方案2】:

您可以在except 块中使用条件逻辑,例如if 语句:

try:
  raise ValueError("asd")
except ValueError as e:
  if someVal == 10:
    print("someval is 10")
  elif someVal == 20:
    print("someval is 10")

Try it here

但是,如果要检查变量的类型,请使用type

if type(myVar) == int:
    print("myVar is an integer")

在您的情况下,要检查您的变量具有哪种类型,类似的方法会起作用:

#myVar = 10          #comment in the appropiate line
myVar = "a string"

try:
  # some work which might raise a ValueError
  raise ValueError()
except ValueError:
  if type(myVar) == int:
    print("myVar is an int.")
  elif type(myVar) == str:
    print("myVar is a string.")

检查特定类型的另一种(可能更好)方法是使用isinstance。有关更多信息,请参阅 Nathan 的回答。

【讨论】:

  • 使用==而不是is比较整数
  • 您应该(通常)使用isinstance 来检查对象是否属于特定类型:premaseem.wordpress.com/2017/10/11/…
  • @Nathan 是的,没错。但我认为,如果有人想检查 primitive 类型,type() 没问题?
  • @Hafnernuss 当然,但由于 OP 仍在学习,这些区别可能很重要
  • 我添加了对您的答案@Nathan 的引用。
【解决方案3】:

使用这个:

try:
    t = int(input("How time need: "))
except ValueError as e:

    if isinstance(_,float):
        print(">>> you should give a int number (you given float) <<<\n")
    elif isinstance(_,str):
        print(">>> you should give a int number (you given str) <<<\n")

在创建 t 之前引发了错误,因此出现了错误。我们知道 python 将最后一个输入/答案存储在 _ 中,因此使用了它。 :)

【讨论】:

  • 你得到什么错误?你也可以分享一下try块吗
  • 阶乘需要多少时间:n vjcbvxv 阶乘需要多少时间:8.9978 阶乘需要多少时间:9 #CHANGE TIMES = 0 开始您的时间:9 输入一个数字:
  • 我已经通过在我身边运行它来检查它,它对我来说很好用。你面临什么错误?
猜你喜欢
  • 1970-01-01
  • 2020-11-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2016-12-08
  • 2019-06-18
相关资源
最近更新 更多