2016-05-19 37 views
0

"リスト索引が範囲外です"というエラーが表示されます。私はコード内のどこかで、2つのセット番号の範囲から番号を呼び出すことができる場所を探しました。私が間違っていると私は謝ります。私はこれに全く新しいです。リスト索引が範囲外です - 範囲外の変数を見つけることがありません

#!/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) 

プログラムは、ネットワークのIPアドレスから位置を検索し、その後、Sparkfish.comに送信されている場所を送り返しマップをGoogleにデータを送信すると仮定されています。ここでは

コードですデータを格納する。

以下の回答でコードを変更しましたが、まだ運がありません。ここにコードとスクリーンショットがあります。

#!/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) =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) 

画面では、それが言うように、

geolocation.getLocation() 

リターンのみ二つのオブジェクト、すなわち緯度と経度をhttps://developers.google.com/maps/documentation/geolocation/intro#responses で適切ご覧になる場合があります !(https://onedrive.live.com/redir?resid=2BBD197F439CC237!30330&authkey=!AJv8LN5_4gHqKpI&ithint=file%2c

+0

?また、あなたの関数maintain()が正しく字下げされていない – Keatinge

+0

完全なトレースバックが役に立ちます。 – nephlm

+0

トレースバックメッセージは**エラーが発生した正確な*を見つけるのに**非常に**役立ちます。 –

答えて

1

を撃ちました。 エラーを出している3つの変数タプルの値をアンパックしようとしています!

(lat, lon) = geolocation.getLocation() 

をお試しください 私はあなたが精度を得ることができますどのようにようと

geolocation.getAccuracy() 

のような任意の方法が存在するかどうか、私はモジュールを使用したことがないためわかりません。ドキュメントからそれを解釈するだけです!

+0

Google Lat、Lon、Accuracyについて上記のことを試してみました。しかし、私はまだ同じ問題とエラーが発生します。誰でも他のアイデアはありますか? :/ ありがとう! –

+0

その後、コードを実行するときにインタープリタに表示される完全なトレースバックコールのコピーを編集して追加してください。それだけで、何が起こっているのかを明確に知ることができます。 –

+0

ここにトレースバックがあります。プログラムが開始されます ルータのホームページにログインします <タイプ 'exceptions.IndexError'>例外がキャプチャされました リストインデックスが範囲外です 10秒後に再起動9秒で再起動8秒で再起動7秒で再起動6秒後に再起動5で再起動秒で再起動4秒で再起動3秒で再起動2秒で再起動1秒で再起動 –

1

(lat、lon、accuracy)= geolocation.getLocation()からエラーが返された可能性があります。あなたの割り当てはjson formatingと一致しません。 json formatingは、場所のサブフィールドとしてlonとlatを持ち、精度はそれ自身です。

ジオロケーション応答

が成功したジオロケーション要求は、位置と半径を規定するJSON形式の応答を返します。

場所:ユーザーの推定緯度および経度(度)。 1つのlatフィールドと1つのlngサブフィールドが含まれます。 精度:推定位置の精度(メートル単位)。これは、指定された場所の周りの円の半径を表します。 { "場所":51.0、 "LNG":{ "LAT" -0.1 }、 "精度":1200.4 }はずこのコードは何をしているべきである

https://developers.google.com/maps/documentation/geolocation/intro#wifi_access_point_object

+0

私はGoogle Lat、LonとAccuracyについて上記のことを試してみました。しかし、私はまだ同じ問題とエラーが発生します。誰でも他のアイデアはありますか? :/ ありがとう! –

関連する問題