IndentationError: unindent does not match any outer indentation level

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Pythonis
User
Beiträge: 6
Registriert: Montag 28. Dezember 2015, 19:47

Moin zusammen,

ich entwickele weiterhin meinen konfigurierbaren TCP client,
aber bekomme beim Debuggen bzw. Ausführen folgendes:

IndentationError: unindent does not match any outer indentation level

Google hat im Wesentlichen nur stackoverflow.com ausgespuckt, und da geht es hauptsächlich
nur um die Einstellungen im Editor.

Vielleicht kann mir ja jemand helfen.

Danke schonmal im Vorraus.

P.S. Wie setze ich den Code in Python?

Code: Alles auswählen

#########  TCP client 3.0

import socket
import threading
import os
import sys
import time
import urllib2
import urllib
import os.path
from os import *
from colorama import init
from colorama import Fore, Back, Style
init()

print (Back.CYAN + '     ###### Welcome! ######')
print (Style.RESET_ALL)
print ""

### Thread object: checking internet connection

def connected(host='http://google.com'):
    try:
        urllib.urlopen(host)
        return True
    except:
        return False

# test
print( 'Connection established!' if connected() else 'No internet connection!' )

# User input		
h = raw_input("Host > ")
h = socket.gethostbyname(h)
print "Target IP: ", h

while True:
	try:
			
		p = 80
		p = int(p)
		break
	except ValueError:
		print "No valid integer for port!"

print ('Checking data...')
time.sleep(0.5)

print (Style.RESET_ALL)

### Thread object: (BETA) Examining server's responses, not working yet
def handle_client(client_socket):
	
	# Print what server says
	request = client_server.recv(1024)
	print "[*] Recieved: %s" % request

# socket object
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((h, p))
client.sendall("GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
response = client.recv(4096)
print "Received data: " + (Fore.YELLOW)
print response
print (Style.RESET_ALL)

# path
mypath = path.join('/', 'home', 'crackhack', 'Schreibtisch')
chdir(mypath)   # change directory(mypath)

if os.path.isfile('TCP data'):
	chdir('TCP data')
	rmdir('TCP data')
	
mypath2 = path.join('/', 'home', 'crackhack', 'Schreibtisch', 'TCP data')
chdir(mypath2)

fname = "Data.txt"

if os.path.isfile(fname):
	print "File does exist at this time, overwriting it!"
    os.remove("Data.txt")
    
	myfile = file('Data.txt', 'w') # Making up new document
	mystring = "Received data:\n"   # String
	myfile.write(response)   # Writing string in file
	myfile.close()  # Close file
		
		
else:
	
	print "No such file, creating new one"
	myfile = file('Data.txt', 'w') # Making up new document
	mystring = "Received data:\n"   # String
	myfile.write(response)   # Writing string in file
	myfile.close()  # Close file

System: Xubuntu IDE: Geany
Zuletzt geändert von Anonymous am Mittwoch 27. Januar 2016, 17:30, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Pythonis: Kann ich nicht nachvollziehen. Vielleicht solltest Du mal Deine Editoreinstellungen prüfen ob Du auch wirklich überall mit Leerzeichen einrückst und nicht vielleicht Leerzeichen und Tabulatorzeichen irgendwo gemischt hast.

Bei Ausnahmen bitte auch immer den gesamten Traceback zeigen und nicht nur die letzte Zeile, denn daran sieht man ja in der Regel in welcher Zeile die Probleme sind.

Da sind einige nicht verwendete Importe, ein völlig unnötiges ``import os.path``, und ein Sternchenimport den Du ganz schnell loswerden solltest. Von `os.chdir()` sollte man im allgemeinen die Finger lassen weil das globalen Zustand verändert und man wenn etwas nicht wie erwartet läuft, man schnell Dateien in Verzeichnissen schreibt oder löscht, mit denen man nicht gerechnet hat.

Apropos globaler Zustand: Auf Modulebene gehören nur Konstanten, Funktionen, und Klassen. Das Hauptprogramm steht üblicherweise in einer Funktion, die `main()` heisst.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Pythonis: um Code in dieses Forum einzufügen gibt es direkt über dem Editfeld eine Dropdown-Box "Code auswählen", wo Du "PY (Python)" auswählen kannst. Bei einem Fehler wäre es gut zu wissen, in welcher Zeile der auftritt. Dann solltest Du in Deinem Editor alle Tabs durch 4 Leerzeichen ersetzen und ihn so einstellen, dass er bei Bedienen der Tab-Taste 4 Leerzeichen einfügt.
Pythonis
User
Beiträge: 6
Registriert: Montag 28. Dezember 2015, 19:47

Sorry,
ich habe die ganze Fehlermeldung vergessen:

File "3.0_TCP-Client.py", line 82
os.remove("Data.txt")
^
IndentationError: unindent does not match any outer indentation level

Nun, ich werde manche Teile jetzt in die main-Funktion packen(Thanks @BlackJack),
aber der Error ist mir immer noch ein Rätsel.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sirius3: entweder die Zeile davor mit print oder die Zeile mit os.remove benutzt statt Leerzeichen ein Tab.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Pythonis hat geschrieben:File "3.0_TCP-Client.py", line 82
os.remove("Data.txt")
^
IndentationError: unindent does not match any outer indentation level
In dem von dir gezeigten Code ist in Zeile 82 ein führendes Leerzeichen zuviel. Bzw. das war es vorhin noch. Jetzt ist es beim gezeigten Code weg. Vermutlich ist es in deiner Datei 3.0_TCP-Client.py noch vorhanden. Übrigens ist das ein ziemlich schlechter Dateiname, da dieses Modul so nicht über ein simples import-Statement importiert werden kann, weil dieser Name keinen gültigen Python-Bezeichner ergibt:

Code: Alles auswählen

In [1]: import 3.0_TCP-Client
  File "<ipython-input-1-93a136484c43>", line 1
    import 3.0_TCP-Client
             ^
SyntaxError: invalid syntax
In specifications, Murphy's Law supersedes Ohm's.
Pythonis
User
Beiträge: 6
Registriert: Montag 28. Dezember 2015, 19:47

Erstmal vielen Dank an alle.
Das Problem ist gelöst
tomba
User
Beiträge: 21
Registriert: Montag 14. Dezember 2015, 15:53

AN PERSONEN MIT DEM GLEICHEN PROBLEM:

Wenn ihr einen Editor benutzt müsst ihr darauf achten, dass die Einrückung (Intendation) überall gleichn ist. Heißt, ihr solltet standardmäßig mit einer Einrückung von 4 Leerzeichen oder 1 Tab arbeiten und NICHT im Programm variieren.

Der Fehler "unindent does not match any outer indentation level" kommt daher, dass ihr einmal als Einrückung Tabs verwendet und dann einfach mal Leerzeichen. (So ist es bei mir (Python 2.7, Sublime Text 3 mit Jedi)

Dieser Fehler war mir anfangs auch ein Dorn im Auge, aber ihr müsst einfach nur die Einrückung zu Tabs oder Leerzeichen konvertieren. Dann ist er bei mir gelöst.
Science makes you fly to the moon, religion makes you fly into buildings.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

tomba hat geschrieben:Heißt, ihr solltet standardmäßig mit einer Einrückung von 4 Leerzeichen oder 1 Tab arbeiten und NICHT im Programm variieren
Vorzugsweise mit Leerzeichen
Antworten