Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > FTP - как перехватить ошибку


Автор: OzMod 21.4.2019, 11:51
когда я вписываю для проверки несуществующию дирректорию то вылетает ошибка ( ПОМОТИТЕ КАК ПЕРЕХВАТИТЬ ЭТУ ОШИБКУ)
ВОТ ПРИМЕР НЕБОЛЬШОЙ
Код

import sys, os, sys, getopt, ftplib, time
from ftplib import FTP
# SERVER AND PATH---------
FTPServer = input("Сервер: ")
print ("#----------------------------#")
FTPWay = input("Путь: ")
# LOGIN AND PASSWORD---------
FTPLogin = input("Логин: ")
FTPasswd = input("Пароль: ")
print ("")
print ("#----------------------------#")
def FTPConnect():
    global FTPWay,FTPWayDEL
    os.system("clear")
    d = []
    id = 0
    ftp = FTP(FTPServer)
    ftp.login(FTPLogin, FTPasswd)
    ftp.cwd(FTPWay)
    ftp.dir(d.append)
    DctF = ftp.nlst()
    ftp.quit()
    for dig in d:
        print (id,[dig])
        id = id + 1
    # OpenFTP---------
    print ("")
    print (" 0 - Сменить директорию ")
    
    OpFTPSelect = input("Выбирите действие: ")
    NEWDir = input("Введите адрес новой директории: ")
    FTPWay = FTPWay+"/"+NEWDir
    if OpFTPSelect == "0":
        if NEWDir in DctF:
            print ("Есть такой адрес.. ")             А Тут всё работает нормально
            FTPConnect()
        else:
            print ("Нет такого адреса.. ")            А вот тут ошибка не переходит на FTPConnect()
            FTPConnect()
            
FTPConnect()

Автор: Romikgy 21.4.2019, 17:57
Код

try:
     FTPConnect()
except:
    pass 

Автор: OzMod 21.4.2019, 18:55
Romikgy
Я пробовал так  ,  это немного не то ...как  вызвать функцию сначала
Код

import sys, os, sys, getopt, ftplib, time
from ftplib import FTP

# SERVER AND PATH---------
FTPServer = input("Сервер: ")
print ("#----------------------------#")
FTPWay = input("Путь: ")
# LOGIN AND PASSWORD---------
FTPLogin = input("Логин: ")
FTPasswd = input("Пароль: ")
print ("")
print ("#----------------------------#")
    
       
def FTPConnect():
    global FTPWay,FTPWayDEL
    os.system("clear")
    d = []
    id = 0
    ftp = FTP(FTPServer)
    ftp.login(FTPLogin, FTPasswd)
    ftp.cwd(FTPWay)
    ftp.dir(d.append)
    DctF = ftp.nlst()
    ftp.quit()
    for dig in d:
        print (id,[dig])
        id = id + 1

    # OpenFTP---------
    print ("")
    print (" 0 - Сменить директорию ")
    
    OpFTPSelect = input("Выбирите действие: ")
    NEWDir = input("Введите адрес новой директории: ")
    FTPWay = FTPWay+"/"+NEWDir
    if OpFTPSelect == "0":
        if NEWDir in DctF:
            print ("Есть такой адрес.. ")
            FTPConnect()      <=---  здесь она переходит коректно и запускаеет ее сначала
        else:
            print ("Нет такого адреса.. ")
            try:
                FTPConnect()   <=---А вот здесь нет если через try фильтровать полюбому будет  pass  а мне хотелось бы что бы запускалась FTPConnect() ( ЭТО РЕАЛЬНО СДЕЛАТЬ?)
            except:
                pass
            
FTPConnect()


Автор: Romikgy 21.4.2019, 23:12
Что вы хотите сделать ? (только четко и по пунктам)

Автор: OzMod 22.4.2019, 00:40
Romikgy,

Часть кода выше написаного. надо что бы в обоих случаях зперезапускалась функцыя FTPConnect()
 
Код

 if NEWDir in DctF:
            print ("Есть такой адрес.. ")
            FTPConnect()   <=---  здесь она переходит коректно и запускаеет ее сначала -- надо что бы  ниже  вызывалась фунция FTPConnect() как сдесь
        else:
            print ("Нет такого адреса.. ")
            try:
            FTPConnect()  <=---А вот здесь функция FTPConnect() не запускается как сделать что бы она запускалась
           except:
                pass


Автор: Romikgy 22.4.2019, 09:20
Цитата(OzMod @  21.4.2019,  23:40 Найти цитируемый пост)
 надо что бы в обоих случаях зперезапускалась функцыя FTPConnect()

зачем? Нельзя сделать весь функционал из уже имеющихся данных?

Автор: OzMod 22.4.2019, 11:03
Romikgy

Код

зачем? Нельзя сделать весь функционал из уже имеющихся данных? 

Можно... 
Я и так ничего нового не добовляю,там и добавлять то в принципе нечего...
там просто чтобы не вылетала программа после того как она проверит и не найдёт нужной директории, проссто запускала эту функцию  ( FTPConnect() ) заново, короче что то типа цикла получается...
-------------------------------------------
Можешь свой пример привести - исправь выше написанный скрипт...

Автор: Romikgy 22.4.2019, 11:41
Цитата(OzMod @  22.4.2019,  10:03 Найти цитируемый пост)
Можешь свой пример привести 

не могу, потому как не понимаю, что надо в конечном итоге.. 
выбрали директорию, она есть, что с ней надо сделать?
выбрали директорию, ее нет, что с этим надо сделать?
Зачем создавать каждый раз новое соединение с фтп сервером? 

Автор: OzMod 22.4.2019, 13:29
Romikgy
Код

1) выбрали директорию, она есть, что с ней надо сделать?
2) выбрали директорию, ее нет, что с этим надо сделать?
3) Зачем создавать каждый раз новое соединение с фтп сервером?  

-------------------------------------------------
1) Вывести сообщение к примеру ( Есть такой адрес.. ) .просто перейти в  эту директорию  - ( здесь все работает )
2) Вывести сообщение к примеру ( Нет такого адреса.. )  далее .перезапускаем функцию FTPConnect() - возвращаемся к запросу ( Выбирите действие:) и так по  кругу пока не выберу существующую директорию....  ( А здесь как раз эта блин ОШИБКА )
3) У меня вроде как создаётся соединение. считываю данные и закрывается соединение,и что бы не держать его открытым... оно открывается каждый раз когда я вызываю функцию FTPConnect()...
--------------------------------------------------
Теперь сможешь свой примерчик  собрать на базе моего - хотябы..... 

Автор: Romikgy 22.4.2019, 15:42
все равно конечная цель остается для меня не понятна
вот код который показывает все файлы по всему фтп
Код

def getdir(ftp,x):
    lst=[]
    d=[]
    ftp.cwd(x)
    ftp.dir(d.append)
    nms=ftp.nlst()
    for ii in enumerate(d):
        i=ii[1]
        li=nms[ii[0]]
        if i[0]=='d':
            lst+=getdir(ftp,x+li+'/')
        else:
            lst.append(x+li)
    return lst
    

def FTPConnect():
    ftp = FTP(fip)
    ftp.login(flogin,fpass)
    dirs=[]
    dirs=getdir(ftp,'/')
    for i in dirs:
        print i
        
    ftp.quit()


FTPConnect()

Автор: OzMod 22.4.2019, 18:52
Romikgy
Круто по твоему та же песня .,,,
и ошибу ту же выдает ( error_perm: 550 250 CWD command successfulOzFILES/: No such file or directory   )
Даааа дилема  :(...

Автор: Romikgy 23.4.2019, 12:00
такое ощущение , что в именах файлов есть запрещенные символы... программы фтп клиенты нормально открывают этот фтп?

Добавлено через 7 минут и 30 секунд
Цитата(OzMod @  22.4.2019,  17:52 Найти цитируемый пост)
error_perm: 550 

Код

The server may reject a CWD request using code 550:

     CWD /pubilc
     550 /pubilc: No such file or directory.

https://cr.yp.to/ftp/cwd.html

прав нету у вашего пользователя для просмотра этого файла/директории ...

Автор: OzMod 23.4.2019, 13:28
Romikgy
 Всё нормально там с правами...

Автор: Romikgy 23.4.2019, 15:21
Цитата(OzMod @  23.4.2019,  12:28 Найти цитируемый пост)
Всё нормально там с правами... 

вам  виднее..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)