首页 > 解决方案 > 显示从 python 到 tkinter 的实际异常消息

问题描述

我正在使用 python 和 tkinter,我的问题由两部分组成:

示例:连接到数据库

代码编写:

sql_connection():
global facility
facility=facilityname.get()
global username
username=uname.get()
global password
password=key.get()
conn = pyodbc.connect('Driver={SQL Server Native Client 11.0}; Server='+facility+'; uid='+username+'; pwd='+password+'; Database = test_DB; Trusted_Connection=No;')
c=conn.cursor()
messagebox.showinfo("LOGIN ","Login Successful")

谢谢

标签: pythonpython-3.xtkinter

解决方案


也许您之前没有使用异常。无论您是否使用 tkinter,我都看不出问题可能是什么。这正是执行所采用的一种路径。要么不发生异常,然后try执行该块直到其结束(并except跳过该块),或者发生异常,然后该try块在其结束之前离开并except执行该块。

例如,这个输出

success
Error: 'something bad happened'

将由以下代码产生

def check_something(bad):
    if bad:
        raise Exception('something bad happened')
    pass


def run_xcheck(x):
    try:
        check_something(x)
        print('Success')
    except Exception as e:
        print('Error: "{}"'.format(e))

run_xcheck(False)
run_xcheck(True)

为了完整起见,以下是(一种)证明它与 tkinter 一起工作的方式相同。它考虑到如果用户不输入数字,输入的转换可能会失败。在这种情况下,python 会引发ValueError异常,您可以捕获该异常以显示特定的错误消息:

import tkinter as tk
from tkinter import messagebox

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.master.title('Exception Test')
        self.pack(padx=8, pady=8) # fill='both', 
        self.create_widgets()

    def create_widgets(self):
        self.content = tk.StringVar(value='1')
        self.label = tk.Label(self, 
            text='Enter number:'
        ).pack(side='left')
        self.entry = tk.Entry(self, 
            textvariable=self.content
        ).pack(side='left')
        self.button = tk.Button(self, 
            text='Square it!',
            command=self.square_pressed
        ).pack()

    def square_pressed(self):
        try:
            i = int(self.content.get())  # conversion may fail
            messagebox.showinfo(message='{}² → {}'.format(i, i**2))
        except ValueError as e:
            messagebox.showerror(message='error: "{}"'.format(e))

root = tk.Tk()
app = Application(master=root)
app.mainloop()

您应该查找 `pyodbc.connect' 可以引发的实际异常类以获得最大量的信息。也许如何捕获特定的 pyodbc 错误消息可能值得一读。


推荐阅读