2016-07-23 2 views
-8

Ich habe versucht, einige Daten in eine CSV-Datei zu speichern, und ich habe diesen Fehler:Schreibe nicht funktioniert „Indentation Fehler“ Datei

i:\Games\Pokemon GO\pokeminer-0.2>python worker.py -st 10 
Traceback (most recent call last): 
    File "worker.py", line 25, in <module> 
    import db 
    File "i:\Games\Pokemon GO\pokeminer-0.2\db.py", line 64 
    f = open('i:\Games\Pokemon GO\pokeminer-0.2\spawn_location.csv','w') 
                    ^
IndentationError: unindent does not match any outer indentation level 

Und das ist der Code:

def add_sighting(session, spawn_id, pokemon): 
obj = Sighting( 
    pokemon_id=pokemon['id'], 
    spawn_id=spawn_id, 
    expire_timestamp=pokemon['disappear_time'], 
    normalized_timestamp=normalize_timestamp(pokemon['disappear_time']), 
    lat=pokemon['lat'], 
    lon=pokemon['lng'], 
) 
# Check if there isn't the same entry already 
existing = session.query(Sighting) \ 
    .filter(Sighting.pokemon_id == obj.pokemon_id) \ 
    .filter(Sighting.spawn_id == obj.spawn_id) \ 
    .filter(Sighting.expire_timestamp > obj.expire_timestamp - 10) \ 
    .filter(Sighting.expire_timestamp < obj.expire_timestamp + 10) \ 
    .filter(Sighting.lat == obj.lat) \ 
    .filter(Sighting.lon == obj.lon) \ 
    .first() 
if existing: 
    return 
session.add(obj) 

f = open('i:\Games\Pokemon GO\pokeminer-0.2\spawn_location.csv','w')  
f.write(pokemon_id+lon+lat+expire_timestamp)  
f.close()  

Dieser Code ist nicht meins, ich versuche nur ein paar Details in eine CSV-Datei zu schreiben. Kannst du mir bitte dabei helfen, damit es funktioniert?

+0

Der Code innerhalb der Funktion sollte nach der Anweisung 'def 'eingerückt werden. Der Code, wie du ihn zeigst, würde in Python niemals funktionieren. Geh zurück zu der Person, von der du den Code erhalten hast. – cdarke

Antwort

1

Wenn der Rest des Codes korrekt ist, sollte dies tun:

def add_sighting(session, spawn_id, pokemon): 
    obj = Sighting( 
     pokemon_id=pokemon['id'], 
     spawn_id=spawn_id, 
     expire_timestamp=pokemon['disappear_time'], 
     normalized_timestamp=normalize_timestamp(pokemon['disappear_time']), 
     lat=pokemon['lat'], 
     lon=pokemon['lng'], 
    ) 
    # Check if there isn't the same entry already 
    existing = session.query(Sighting) \ 
     .filter(Sighting.pokemon_id == obj.pokemon_id) \ 
     .filter(Sighting.spawn_id == obj.spawn_id) \ 
     .filter(Sighting.expire_timestamp > obj.expire_timestamp - 10)  \ 
     .filter(Sighting.expire_timestamp < obj.expire_timestamp + 10) \ 
     .filter(Sighting.lat == obj.lat) \ 
     .filter(Sighting.lon == obj.lon) \ 
     .first() 
    if existing: 
     return 
    session.add(obj) 

    f = open('i:\Games\Pokemon GO\pokeminer-0.2\spawn_location.csv','w')  
    f.write(pokemon_id+lon+lat+expire_timestamp)  
    f.close() 

Das ist, weil Python explizite Trennzeichen nicht wie andere Sprachen, um ihre Funktionen (zB C aromatisieren Sprachen, die geschweiften Klammern verwenden {}). Stattdessen verwendet Python einen Einzug, um zu definieren, wo Funktionen beginnen und wo sie enden. def ist, wie Sie eine Funktion starten, und add_sighting ist der Name der Funktion. Alles danach ist (wahrscheinlich) innerhalb der Funktion und sollte daher eingerückt werden.