0

我现在脑子里冒出一股蒸汽,但我不知道我的代码出了什么问题。以下是相关行:

 try:
   outport = record_dict[id][hash_ % len(record_dict[id])]
 except:
   fp.write("Problem-"+str(type(record_dict[id]))+"\n")
   fp.write("Problem-"+str(record_dict[id])+"\n")
   fp.write("Problem-"+str(len(record_dict[id]))+"\n")

这是我得到的错误:

  File "xxxx.py", line 459, in yyyyy
    fp.write("Problem-"+str(len(record_dict[id]))+"\n")
  TypeError: 'long' object is not callable 

fp指向的内部文件:

Problem-<type 'list'>
Problem-[5, 6, 7, 8]

我的代码有什么问题?我该如何调试它?

4

3 回答 3

7

您是否创建了一个名为strlen任何地方的变量?如果是这样,那是你的问题。(很可能,len因为str之前使用过没有任何问题)。

Python 内置函数不是保留的——这意味着您可以自由地将它们重新分配给您想要的任何对象。看起来您分配len了一个长整数,这是有道理的,因为len在其他语言中它是一个完全合理的变量名。

你应该从中得到的一点是要小心不要通过创建同名变量来“隐藏”内置函数。它会产生难以调试的问题。

于 2012-06-14T17:25:09.950 回答
1

作为旁注:裸“except”子句是最糟糕的异常处理方案——您只是不知道会发生什么异常,并且您丢失了存储在异常回溯中的所有有用的调试信息。FWIW,sys.exit 实际上是通过引发由 python 运行时捕获的 SysExit 异常来实现的。

如果您处于循环中并且想要记录有关当前迭代异常的信息并继续下一项,请确保您没有捕获 SysExit 并学习使用日志记录模块:

import logging
# this will require some minimal conf somewhere, cf the fine manual
logger = logging.getLogger("my-logger-name")

def myfunction(somesequence):
    for item in somesequence:
        try:
            result = process(item)
        except Exception, e: 
            # in 'recent' python version this will not catch SysExit
            # please refer to the doc for your python version
            # if it's a slightly outdated version, uncomment the
            # following lines:
            # if isinstance(e, SysExit):
            #     raise
            logger.exception("got %s on item %s", e, item)
            continue
        else:
            # ok for this item
            do_something_with(result)
于 2012-06-14T17:53:08.253 回答
0

我在不同的情况下遇到了这个问题:

slope = (nsize*iopsum - (osum)(isum)) / (nsize*oopsum - (osum)*2)

当然,我得到它的原因(osum)(isum)是将 osum 解释为一个数字并试图在其上呼叫另一个数字。所以在它被解释之后它看起来像这样:1513(3541)这没有任何意义。

我通过在正确的位置添加 * 来修复它(osum)*(isum)

于 2016-05-09T14:08:30.410 回答