繁体   English   中英

如何正确捕获 pySVN 异常?

[英]How do I correctly catch pySVN exceptions?

我有一个连接到 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:\buildroot\win64-vc-14.1-1.14.0\subversion-1.14.0\subversion\libsvn_client\checkout.c' line 88: assertion failed (svn_uri_is_canonical(url, scratch_pool))

除了“pysvn.ClientError”作为异常参数之外,我还尝试过“svn”、“pysvn.svn”、“AssertionError”、“SvnException”和一个空白的“except:”。 他们似乎都没有正确捕获异常并让我处理它。

事实证明,这是 pySVN 中的一个错误,根据开发人员 Barry Scott 的说法,将在 2047 版中修复。 有关更多信息,请参阅以下错误报告

当底层 SVN 连接器发现无效 URL 时,例如来自错误的用户输入,就会出现该错误。 如果 URL 本身有效,但连接失败,则不会发生该错误。

与此同时,要么进行一些输入验证,检查是否“www”。 等存在,或使用以下代码段手动引发可以处理的异常:

c = pysvn.Client()
if not c.is_url( url_candicate ):
    raise AttributeError( 'bad url' )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM