2013-06-30 2 views
-2

내 정의에 음수 값에 문제가 있습니다. 베이스 (10)와 인터넷 용 잘못된 문자() :
에 ValueError : 피트가 음수 때마다 그것은 오류를 반환합니다 '-' Python 부정적인 timedelta 문제

def formatTime(_seconds): 
    ft = str(datetime.timedelta(seconds=_seconds)) 
    if int(ft[0]) <= 0: 
     ms = ft.find('.') 
     if ms < 0: 
      return "%s.000" % ft[2:11] 
     else: 
      return ft[2:11] 
    else: 
     x = ft.find(':') 
     if x > -1: 
      hlen = len(ft[0:x]) 
      ms = ft.find('.') 
      if ms < 0: 
       return "%s.000" % ft[0:((11 + hlen) -1)] 
      else: 
       return ft[0:((11 + hlen) -1)] 
     else: 
      x = ft.find('.') 
      if x > -1: 
       ms = ft.find('.') 
       if ms < 0: 
        return "%s.000" % ft[0:(x + 4)] 
       else: 
        return ft[0:(x + 4)] 
      else: 
       ms = ft.find('.') 
       if ms < 0: 
        return "%s.000" % ft[0:11] 
       else: 
        return ft[0:11] 

내가 초보자 그리고 난 솔직히 지금 잃었어요.

+1

여기서 무엇을하려고합니까? –

+0

ft가 음수이면 오류를 반환합니다. ValueError : 밑이 10 인 '(')의 int()에 대한 리터럴이 잘못되었습니다. 실제 음수 값을 인쇄하려고합니다. 양수 값이 정상적으로 작동합니다. – pythonboxquestion

+2

나는 이미 그것을 보았다, 나는이 코드로 무엇을하려고하는지 묻는다. 몇 가지 샘플 입력과 예상 결과를 제공하십시오. –

답변

3

하나의 문제는 여기에 있습니다 :

ft = str(datetime.timedelta(seconds=_seconds)) 
print(ft) # I added this 
if int(ft[0]) <= 0: 

출력 : 당신이 볼 수 있듯이

>>> formatTime(-10) 
-1 day, 23:59:50 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
    File "test.py", line 5, in formatTime 
    if int(ft[0]) <= 0: 
ValueError: invalid literal for int() with base 10: '-' 

ft[0] 정수로 변환 할 수없는 단일 문자 '-'이다.

부호가있는 부동 소수점을 반환하는 ft = datetime.timedelta(seconds=_seconds).total_seconds()을 사용하는 것이 좋습니다.

+0

그 해결 방법은 무엇입니까? – pythonboxquestion

+0

@pythonboxquestion, 편집을 참조하십시오. –

0

대신 문자열로 변환 당신은 같은 것을 할 수 있습니다

>>> def convert_timedelta(duration): 
     #http://goo.gl/Ci4wP 
     days, seconds = duration.days, duration.seconds 
     hours = days * 24 + seconds // 3600 
     minutes = (seconds % 3600) // 60 
     seconds = (seconds % 60) 
     return hours, minutes, seconds,duration.microseconds 
... 
>>> d = timedelta(seconds = -.50) 
>>> h, m, sec, ms = convert_timedelta(d) 
>>> h 
-1 
>>> m 
59 
>>> sec 
59 
>>> ms 
500000 

지금 당신은 당신의 물건을 할 이러한 변수 h, m, secms를 사용할 수 있습니다.