2016-05-18 4 views
1

Я работаю над проектом, который я нашел онлайн для простого IP-адреса для разговора в Google Map, чтобы найти место для простого процесса отслеживания автомобилей. Всего всего 4 файла, но я застрял на скрипте main.py. Я пытался заставить его работать целыми днями. Я дал прогресса, но сейчас я получаю сообщение об ошибке:неподдерживаемый тип (-ы) операндов для%: 'NoneType' и 'int'

TypeError: неподдерживаемый тип операнда (s) для%: 'NoneType' и 'Int'

Вот сценарий:

#!/usr/bin/python 
import sys,time,geolocation,publisher 
from subprocess import call 

SleepTime = 10 # seconds 
_lat = 0.00 
_lon = 0.00 

def maintain(): 
    global _lat 
    global _lon 
(lat,lon,accuracy) = geolocation.getLocation() 
if(lat != _lat or lon !=_lon): 
    data = str(lat) + "," + str(lon) + "," + str(accuracy) 
    print ("publishing") , data 
    publisher.publishtoInternet(data) 
    _lat = lat 
    _lon = lon 
else: 
    print ("no change in coordinates") 

print ("program begins") 
while True: 
try: 
    maintain() 
except Exception as inst: 
    print (type)(inst), ('exception captured') 
    print (inst) 
    sys.stdout.flush() 
    #file = open('/tmp/loctracker.error.log','a') 
    #file.write('exception occured, trying to reboot') 
    #file.close() 
    #call(["sudo","reboot"]) 
#break 
for i in range(0,SleepTime): 
    sys.stdout.write ("\restarting in %d seconds ") % (SleepTime-i) 
    sys.stdout.flush() 
    time.sleep(1) 

Любая помощь будет очень оценена!

С уважением

+0

Вы можете исправить ваш indendation пожалуйста? – miradulo

+0

Можете ли вы показать полную трассу, пожалуйста? –

+0

Я не согласен, что вопрос о TypeError является дубликатом вопроса об AttributeError, даже если некорректная группировка вызвала оба. – Noumenon

ответ

1

В линии

sys.stdout.write ("\restarting in %d seconds ") % (SleepTime-i) 

Python думает, что вы используете мод оператора делать математику на результат sys.stdout.write (который None) и SleepTime - i (который является целое). Это потому, что у вас ранняя скобка. То, что вы хотели, чтобы напечатать весь результат:

sys.stdout.write ("restarting in %d seconds " % (SleepTime-i)) 

В качестве примечания,% для форматирования frowned upon в Python в пользу String.Format.

1

В этой строке:

sys.stdout.write ("\restarting in %d seconds ") % (SleepTime-i) 

вы используете неверную группировку. Вот что он делает, иллюстрирована более скобки:

(sys.stdout.write ("\restarting in %d seconds ")) % (SleepTime-i) 

sys.stdout.write() возвращается None, и вы делаете None % integer. Вам нужно положить SleepTime-i внутри вызова, поэтому он относится к строке, а не вызов функции:

sys.stdout.write("\restarting in %d seconds " % (SleepTime-i))