【问题标题】:Python: How to know which part is causing Error using try/except?Python:如何使用 try/except 知道哪个部分导致错误?
【发布时间】:2019-09-26 19:47:02
【问题描述】:

我只想对多个变量使用一个try\except。我想找出导致错误的部分,以便在except 部分下将其打印给用户。

try:
    i = int(i)
    j = int(j)
    k = int(k)
    l = int(l)
    m = int(m)
    n = int(n)
    n+1 = int(n+1)
    ...
    ..
    .

except ValueError:

    print('Please enter an integer as {}'.format(# whether i, j, k, l, or ...))

我想找出是哪个int(x) 导致了错误,以便将其打印给用户?有什么办法吗?我不想尝试每个部分,因为我的变量几乎是无限的;)

【问题讨论】:

  • 类似于this question
  • 为什么一开始就有这些变量?您在此处的示例似乎使它们更适合用作列表。 (反过来,您的错误将能够通过填充列表的迭代来查明)
  • @Sayse,这些是不同的 tk 条目,我想知道哪个不是 int,所以我想通知用户只输入整数!
  • @MyNameIsCaleb 我已经阅读了您的建议,但这不是我所表达的。我想知道用户输入的是字母而不是整数的输入(i,j,k,...)。但无论如何还是谢谢。

标签: python python-3.x exception


【解决方案1】:

这样的事情怎么样:

def parse_int(num, name='var'):
    try:
        return int(num)
    except ValueError:
        print(f"Please enter an integer for {name}")


i = parse_int(i, name='i')

您可以根据需要为其他变量调用parse_int 方法。

PS:您不能分配给像 n+1 这样的表达式 - 代码中 except 之前的最后一行将不起作用

【讨论】:

  • 谢谢。是的,我知道n+1 是错误的,我写它是为了进一步说明问题所在。对不起,但这不是我所需要的。但无论如何还是谢谢。
  • 这对我来说似乎是最干净的方式。不知何故,您必须跟踪您所在的对象。
【解决方案2】:

我认为@rdas 有更好的答案,但既然你不喜欢它,你也可以这样做,它只是看起来有点老套,并不比在每一行都使用try/except 好多少.

try:
    last = 'i'
    i = int('10')
    last = 'j'
    j = int('ten')
except ValueError:
    print(f'Please enter an integer as {last}')

【讨论】:

  • 正如我所说的 i,j,k,l,... 都是 Biiiig 表单的 tk 条目值,我想知道用户在哪里尝试输入除整数以外的任何内容。所以我可以在except 部分下打印回来。有什么方法可以知道哪个 i,j,k,l,... 提高了ValueError?谢谢+1。
【解决方案3】:

如果它们都是整数,并且它们以某种方式相关,那么您可以使用列表来存储它们。另一个带有变量名称的列表的原因是您可以使用相同的索引来说明哪个变量出错了。

my_list=[]
my_list_variables=["a","b","c"]
i=0
while True:
    try:
        x=int(input("Please input "+my_list_variables[i]+" : "))
        my_list.append(x)
        i=i+1
        #Just make sure to add a if statement to quit out of the loop
        #Like if that is end of the amount of input you are asking.
        break
    except ValueError:
        #index i doesn't change so you can tell the user which variable they
        #entered a wrong input for.
        print("Error: input "+my_list_variables[i]+" have to be a number")

只需存储另一个名称变量列表。

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多