2013-06-30 36 views
-2

我對我的定義有負值的問題。與基地10個無效字面INT():每當ft爲負,將返回一個錯誤:
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:int()以10爲底的無效文字:' - ' 我試圖讓實際負值打印出來。正值正常工作。 – 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 

現在你可以使用這些變量hmsecms做你的東西。