Warum nennst Du die FTP-Client-Instanz cur? Benutze aussagekräftige Namen!
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Variablennamen werden wie Attribute und Methoden komplett klein geschrieben.
Methoden sollten nach Tätigkeiten benannt werden. Bei Synology_DS718 weiß man nicht, was die Funktion tut.
Was sollen die Postfixe __CONFIG bedeuten, und warum steht da ein String "True" drin und nicht ein Wahrheitswert?
Benutze keine nackten except, weil die wirklich alle Fehler abfangen und so Programmierfehler nicht finden kann. Diese tiefe Verschachtelung ist nicht nur schwer zu lesen, sondern macht wahrscheinlich auch nicht das, was gewollt ist.
Nach einem except-Block muß dass Programm in einem Zustand sein, mit dem es weiter arbeiten kann. Bei einem Fehler in Synology_DS718 ist aber entweder ftp gar nicht definiert, oder aber die Verbindung nicht erfolgt, so dass es garantiert Folgefehler gibt, deren Ursprung man nicht finden kann.
ip, port, user und pwd sollte nicht irgendwo mitten in einer Methode tief verschachtelt stehen, sondern am besten als Konstanten ganz am Anfang der Datei.
customer wird gar nicht verwendet.
Und wie vermutet, mußt Du an der richtigen Stelle das Encoding setzen.
Code: Alles auswählen
FTP_IP = 'xxx.xxx.xxx.xxx'
FTP_PORT = xxxx
FTP_USER = 'xxxx'
FTP_PASSWORD = 'xxxxx'
# Hier erstelle ich mir meine FTP Verbindung
def connect(self):
try:
ftp = FTP_TLS(encoding='latin-1')
ftp.ssl_version = ssl.PROTOCOL_TLSv1_2
ftp.connect(FTP_IP, FTP_PORT)
ftp.login(FTP_USER, FTP_PASSWORD)
self.ftp_connection = ftp
except ftplib.all_errors as e:
print(f'Error connecting to FTP-Server:\n{e}')
self.ftp_connection = None
def createCustomerDirs__FTP(self):
self.connect()
if self.ftp_connection is None:
# connection failed
return
...