Python 查找ValueError缺少的值:需要超过X个值才能解包

Python 查找ValueError缺少的值:需要超过X个值才能解包,python,error-handling,variable-assignment,iterable-unpacking,Python,Error Handling,Variable Assignment,Iterable Unpacking,我有一个函数调用,如下所示: a、b、c、x、y、z=生成值(q) 它在一个try块中捕获错误,但我还需要找出丢失的值。我也不能事先清除变量。我也不希望将函数中的6个变量合并到一个列表中并传递它,但除此之外,还有什么方法可以找出缺少哪些变量 values = tuple(generatevalues(q)) try: a, b, c, x, y, z = values except ValueError as e: print(len(values)) # for example

我有一个函数调用,如下所示:

a、b、c、x、y、z=生成值(q)

它在一个try块中捕获错误,但我还需要找出丢失的值。我也不能事先清除变量。我也不希望将函数中的6个变量合并到一个列表中并传递它,但除此之外,还有什么方法可以找出缺少哪些变量

values = tuple(generatevalues(q))
try:
    a, b, c, x, y, z = values
except ValueError as e:
    print(len(values)) # for example
    print(values)
要调试此函数,现在是了解


好吧,它总是缺少从末尾开始的变量,因为您正在解包一个元组或列表。如果您从
generatevalues(q)
返回5个值,那么您将丢失
z
。如果返回4,您将丢失
y
z
。为什么
generatevalues
返回任意数量的这些值?还有,为什么需要解包呢?如果generatevalues返回4项,您希望定义a、b、c、x而不是y、z?一般来说,这不是一个很好的模式。函数不应该返回6个值,但我正在尝试调试它。@incognito2:在这种情况下,只需捕获结果iterable:
values=generatevalues(q)
。现在,您可以查看什么是
值以及它是否有六项。答案很好,但您可能需要解释一下快速和肮脏调试的简单
打印值的可能性。这看起来很明显,但对新手来说可能不是。此外,我会使用新型的
except-ValueError作为e:
,而不是不推荐的
except-ValueError,e:
。现在可能有更多的新手需要3.0+支持,而不是2.4-。问题是错误是随机发生的,我大部分时间都不在,所以现在我只是把它放在一个试块中,并计划将有关错误的信息写在日志文件中。@incognito2:所以只需使用gnibbler的第一个版本,然后将
logging.error('Exception{!r}将{!r}解包为6个值'。格式化(e,values))
(或您使用的任何日志函数)到
中,除了他有省略号的
。然后,您将看到是否有
None
,或者是5个值而不是6个值,或者是6元素元组的字符串表示而不是元组本身,或者…
values = tuple(generatevalues(q))
try:
    a, b, c, x, y, z = values
except ValueError as e:
    import pdb; pdb.set_trace()