繁体   English   中英

函数内sys.exc_info()的问题返回None元组

[英]Issue with sys.exc_info() within a function returns None tuple

我写了一个打开访问数据库的函数。 当失败时,它会抛出一个带有pywintypes_error消息的异常,例如:

pywintypes.com_error: (-2147352567, 'Une exception s\u2019est produite.', (0, None, 'La base de données est déjà ouverte.', None, -1, -2146820421), None)

我想用sys.exc_info()捕获此消息,但是在我的函数中不起作用:它返回None。

这是我的功能:

def drop_user(user):
    global dbpath

    with open("login_hash.txt", 'r+') as fp:
        data = fp.readlines()
        for lines in data:
            if user not in lines:
                fp.write('')
            fp.truncate()

    try:
        print("Access running...")
        access = win32com.client.Dispatch('Access.Application')
        access.OpenCurrentDatabase(dbpath)
        acDb = access.CurrentDb()
        access.Visible = False
        access.CurrentProject.Connection.Execute("DROP USER " + user + ";")
        kill_access()
        del access
        messagebox.showinfo("Success", user + " a bien été ajouté.")
    except (pywintypes.com_error):
        pattern = r'"(.*?)"'
        m = re.search(pattern, str(sys.exc_info()[1]))
        messagebox.showinfo("Erreur", m.group().strip('"').replace('\xa0', ''))
        kill_access()
        del access

谢谢你的帮助

exc_info()[1]是异常实例,使用except子句的as <name>部分可以更轻松地获得实例,即:

try:
    your_code_here()
except pywintypes.com_error as exc:
    # here `exc` is the exception instance

然后,您可以使用exc.args获取传递给异常的exc.args

您可能还想了解字符串格式化操作,即:

print("this is a {} with {}".format("format string", "placeholders"))

暂无
暂无

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

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