2014-04-12 4 views
-6

이 내가 마지막에 명시됩니다 오류가 보채 유지 :이 프로그래밍에있어 잘못된 점은 무엇입니까?

import math 
# Target: 
# Enter an input and it will convert into GB, MB and KB with the leftover bytes in it 
def start(): 
print '' 
print '' 
# 10 = 1 billion 
byte = input("Bytes: ") 
tw = int(math.log10(byte))+1 
tw = tw - 7 
gb = byte // 10**9 
byte = str(byte) 
a = len(byte) - 6 
b = len(byte) - 3 
if b > 0: 
    if a > 0: 
     kb = int(str(byte)[a:b]) 

    else: 
     kd = int(str(byte)[0:b]) 
else: 
    kb = 0 
c = len(byte) - 6 
if c > 1: 
    mb = int(str(byte)[0:c]) 
    if int(mb) > 999: 
     if int(mb) < 10000: 
      mb = mb // 10**3 
      byte = str(byte) 
      if len(byte) <= 3: 
       mb = 0 
       kb = 0 
else: 
    mb = 0 

d = len(byte) - 6 
byte = int(byte) 
lob = int(str(byte)[d:]) 
byte = str(byte) 
if int(kb) > 1000: 
    dmb = mb // 10**3 
    mb = mb + dmb 
    kb = kb // 10**3 
print '' 
print '' 
print '' 
print('  GB: %s MB: %s KB: %s') % (gb, mb, kb) 
print('  Bytes: %s') % lob 
print '' 
print '' 
print '' 
start() 

이 어떤 문제가 있습니까? 는 말을 계속 :

잘못 무엇
Traceback (most recent call last): 
File "bytes.py", line 53, in <module> 
start() 
File "bytes.py", line 39, in start 
if int(kb) > 1000: 
UnboundLocalError: local variable 'kb' referenced before assignment 

! I 39 번 라인을 다른 장소로 계속 변경하지만 어떻게 수정해야하는지 모르겠습니다. UnboundLocalError를 사용하면 할당 전에 참조 된 로컬 변수 'kb'를 이해할 수 없습니다. 도움!

+5

'kd'에만 할당하고 'kb'에는 할당하지 않는 코드 경로가 있습니다. 아마도 이것은 오타입니다. 좋은 변수 이름을 사용하면 훨씬 쉽게 찾을 수 있습니다. – geoffspear

답변

1

이외에도 여러 추악한 반 패턴에서, 하나의 명백한 실수/오타가있다 :

if a > 0: 
    kb = int(str(byte)[a:b]) 

else: 
    kd = int(str(byte)[0:b]) 

에서 좋은 모습을 가지고 당신의 오류가 어디에서 오는지 당신이 지금 볼 수 있나요?

+0

죄송합니다.이 항목은 OFF-TOPIC을 읽지 않습니다. – Okx

관련 문제