检查哪个变量抛出了异常

2024-09-29 21:44:51 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法检查哪个变量赋值方法引发了异常?例如:

a = '\xa1'
b = 'normal string'

try:
    c = b.encode('ascii')
    d = a.encode('ascii')
except Exception as e:
    print "error thrown for input: %s" % <figure out which variable threw error>

在这种情况下,我希望输出说“error-thrownforinput:d”,而如果我切换变量,使c=a.encode('ascii'),那么输出会说“error-thrownforinput:c”。这是可能的还是我需要将变量赋值分为两个不同的try块?你知道吗

另外,出于好奇,假设有5个、10个或更多的变量不容易用for循环迭代。那会是5-10个不同的试块吗?或者你会把它们堆成一个列表只是为了一个for循环?你知道吗


Tags: 方法forstringasasciiexceptionerrorencode
3条回答

您可以使用traceback模块获取更多信息:

a = '\xa1'
b = 'normal string'
import sys, traceback
try:
    c = b.encode('ascii')
    d = a.encode('ascii')
except Exception as e:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_tb(exc_traceback)

File "/.............py", line 65, in <module>
d = a.encode('ascii')

traceback.print_tb(exc_traceback)给出行号和有问题的变量。你知道吗

要了解原因:

print("Reason: {}".format(e.reason))
Reason: ordinal not in range(128)

注意:不要在家里尝试,孩子们,可读性很重要

a = '\xa1'
b = 'normal string'
z = 0
try:
    c = b.encode('ascii')
    z = 1
    d = a.encode('ascii')
except Exception as e:
    print "error thrown for variable %s" % (a if z else b)

你可以创建一个临时变量,我们称之为z,将它设置为0,如果b变量没有发生异常,那么将z更改为1,最后检查z==1,如果是,那么第二个变量中的encode方法引发了异常,如果不是,那么第一个变量中的encode方法就是引发异常的方法,我认为这段代码运行得很好,但我没有测试它。你知道吗

变量从不引发异常。异常是从被调用的方法encode引发的。你知道吗

如果您想知道是什么引发了异常,请将每个encode调用包装在一个单独的try/except块中。你知道吗

您还可以查看e

except Exception as e:
    print(e)

\xa1的输出是:

'ascii' codec can't encode character '\xa1' in position 0: ordinal not in range(128)

在这里你可以看到令人不快的输入。你知道吗

编辑:

您还可以查看e.args,对于\xa1,它是:

('ascii', '¡', 0, 1, 'ordinal not in range(128)')

所以e.args[1]是有问题的输入。你知道吗

相关问题 更多 >

    热门问题