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

strまたはという名前の変数を作成しましたlenか?もしそうなら、それはあなたの問題です。(おそらく、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 に答える