有没有办法检查哪个变量赋值方法引发了异常?例如:
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循环?你知道吗
您可以使用traceback模块获取更多信息:
traceback.print_tb(exc_traceback)
给出行号和有问题的变量。你知道吗要了解原因:
注意:不要在家里尝试,孩子们,可读性很重要
你可以创建一个临时变量,我们称之为z,将它设置为0,如果b变量没有发生异常,那么将z更改为1,最后检查z==1,如果是,那么第二个变量中的encode方法引发了异常,如果不是,那么第一个变量中的encode方法就是引发异常的方法,我认为这段代码运行得很好,但我没有测试它。你知道吗
变量从不引发异常。异常是从被调用的方法
encode
引发的。你知道吗如果您想知道是什么引发了异常,请将每个
encode
调用包装在一个单独的try/except
块中。你知道吗您还可以查看
e
:\xa1
的输出是:在这里你可以看到令人不快的输入。你知道吗
编辑:
您还可以查看
e.args
,对于\xa1
,它是:所以
e.args[1]
是有问题的输入。你知道吗相关问题 更多 >
编程相关推荐