#python #svn #pysvn
#python #svn #pysvn
Вопрос:
У меня есть функция, которая подключается к базе данных SVN и извлекает папку / файл. При вводе правильной информации для входа все происходит так, как должно. Однако при вводе неправильной информации для входа в систему pysvn создает исключение и завершается сбоем. Я пытаюсь перехватить и обработать ошибку, но, похоже, не могу ее правильно перехватить:
Код (при условии, что ‘svnlogin’ содержит информацию о мусоре):
def connect_and_checkout():
client = pysvn.Client()
client.callback_get_login = svnlogin
try:
client.checkout(svnurl(),
'./examples/pysvn')
except (pysvn.ClientError) as e:
print("error during svn command", e)
Ожидаемый результат:
error during svn command, 'error'
Фактический вывод (сбой программы):
svn: E235000: In file 'c:buildrootwin64-vc-14.1-1.14.0subversion-1.14.0subversionlibsvn_clientcheckout.c' line 88: assertion failed (svn_uri_is_canonical(url, scratch_pool))
Помимо «pysvn.ClientError» в качестве параметра исключения я также пробовал «svn», «pysvn.svn», «AssertionError», «SvnException» и просто пустое «except:». Ни один из них, похоже, не правильно перехватил исключение и не позволил мне его обработать.
Ответ №1:
Оказывается, это ошибка в pySVN и, по словам разработчика Барри Скотта, она будет исправлена в редакции 2047. Смотрите следующий отчет об ошибке для получения дополнительной информации
Ошибка возникает, когда базовый SVN-соединитель обнаруживает недопустимый URL, например, из-за неправильного пользовательского ввода. Ошибка не возникает, если сам URL-адрес действителен, но соединение не удается.
Тем временем либо выполните некоторую проверку ввода, которая проверяет, присутствует ли «www.» и т.д., Либо используйте следующий фрагмент, чтобы вручную вызвать исключение, которое можно обработать:
c = pysvn.Client()
if not c.is_url( url_candicate ):
raise AttributeError( 'bad url' )