2012-06-14 10 views
0

지금 내 머리에서 증기가 나오지만 코드에 무엇이 잘못되었는지를 알 수 없습니다. 여기TypeError : 'long'객체를 호출 할 수 없습니다.

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") 

오류 내가 얻을 수있다 : FP가 가리키는 파일 내부

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

가 :

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

내 코드에 어떤 문제가 다음은 관련 라인은 무엇입니까? 어떻게 디버깅합니까?

답변

7

str 또는 len이라는 변수를 어디에서 만들었습니까? 그렇다면 문제가됩니다. (문제가없는 한 str이 일찍 사용되었으므로 대부분 len).

파이썬 기본 제공은 예약되어 있지 않으므로 원하는 모든 객체에 자유롭게 할당 할 수 있습니다. len은 다른 언어에서는 매우 합리적인 변수 이름이기 때문에 의미가있는 긴 정수로 할당 된 것처럼 보입니다.

같은 이름의 변수를 만들어 내장 함수를 "숨기지"않도록주의해야합니다. 그것은 디버그하기가 어려울 수있는 문제를 만든다.

+0

문제 없음에 *에 추가하여 해결했습니다. 변수 이름에주의를 기울이십시오. – mgilson

+0

저는 실제로 다른 사람의 코드 기반을 사용하고있었습니다. 누군가 상처받을거야. – Bruce

1

보조 노트 : 예외적 인 "except"절이 최악의 예외 처리 스키마입니다. 예외 상황이 발생할 수 있는지 알지 못하며 예외 추적에 저장된 유용한 디버깅 정보가 모두 손실됩니다. FWIW, sys.exit는 실제로 파이썬 런타임에 의해 잡힌 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) 
: 당신이 루프에있어 현재의 반복에 대해 예외에 대한 정보를 정기적으로 로그인하고 다음 항목을 계속, 당신은 SysExit를 잡을하지 않습니다 있는지 확인하고 로깅 모듈을 사용하는 방법을 배우게하려면

물론

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

나는 그것이 (osum)(isum)이 숫자로 osum를 해석하고 그 위에 다른 번호로 전화를 시도 하였다 점점 된 이유 :

0

나는 다른 문맥에서이 문제를 가지고 있었다. 그래서 그것이 해석 된 후에 그것은 다음과 같이 보입니다 : 1513 (3541) 어떤 의미가 없습니다.

나는 올바른 위치 (osum)*(isum)

관련 문제