import ftplib
import urllib2
import os
import logging
logger = logging.getLogger('ftpuploader')
hdlr = logging.FileHandler('ftplog.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
FTPADDR = "some ftp address"
def upload_to_ftp(con, filepath):
try:
f = open(filepath,'rb') # file to send
con.storbinary('STOR '+ filepath, f) # Send the file
f.close() # Close file and FTP
logger.info('File successfully uploaded to '+ FTPADDR)
except, e:
logger.error('Failed to upload to ftp: '+ str(e))
Zdá sa, že to nefunguje, dostanem syntaktickú chybu, aký je správny spôsob, ako to urobiť pre zaznamenávanie všetkých druhov výnimiek do súboru
Musíte definovať typ výnimky, ktorú chcete zachytiť. Takže namiesto except, e:
napíšte except, e:
pre všeobecnú výnimku (ktorá bude aj tak zaznamenaná).
Ďalšou možnosťou je napísať celý kód try/except týmto spôsobom:
try:
with open(filepath,'rb') as f:
con.storbinary('STOR '+ filepath, f)
logger.info('File successfully uploaded to '+ FTPADDR)
except Exception, e:
logger.error('Failed to upload to ftp: '+ str(e))
v Pythone 3.x a moderných verziách Pythonu 2.x používajte except Exception as e
namiesto except Exception, e
:
try:
with open(filepath,'rb') as f:
con.storbinary('STOR '+ filepath, f)
logger.info('File successfully uploaded to '+ FTPADDR)
except Exception as e:
logger.error('Failed to upload to ftp: '+ str(e))
Môžete skúsiť explicitne určiť typ BaseException. Tým však zachytíte len deriváty BaseException. To síce zahŕňa všetky implementačne zabezpečené výnimky, ale je možné vyvolať aj ľubovoľné výnimky starého typu.
try:
do_something()
except BaseException, e:
logger.error('Failed to do something: ' + str(e))