Отображение фактического сообщения об исключении от python до tkinter - PullRequest
0 голосов
/ 05 мая 2020

Я использую python и tkinter, и мой вопрос состоит из двух частей:

Пример: подключение к базе данных

  • Как я могу сказать, например, в моем коде , если вход в систему прошел успешно, сделайте то и это ...
  • Как я могу отобразить фактическое сообщение об исключении / ошибке, которое появилось во время выполнения в Tkinter? Например, были неправильные учетные данные. Я хочу, чтобы это сообщение отображалось с помощью messagebox.showerror

Написанный код:

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")

Спасибо

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Возможно, вы раньше не использовали исключения. Я не понимаю, в чем может быть проблема, независимо от того, используете ли вы 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)

Для полноты картины следующее (вид of) доказательство того, что он работает таким же образом вместе с tkinter. Он учитывает тот факт, что преобразование ввода может завершиться неудачно, если пользователь не введет число. В этом случае python вызывает исключение ValueError, которое вы можете поймать, чтобы отобразить указанное c сообщение об ошибке:

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()

Вы должны найти фактические классы исключений, которые ` pyodb c .connect 'можно поднять для получения максимального количества информации. Может быть, стоит прочитать как отловить специфику c pyodb c сообщение об ошибке .

0 голосов
/ 05 мая 2020

Попробуйте следующее:

try:
   # call whatever code that might throw an exception

except Exception as e:
     messagebox.showerror(title "Exception raised",message = str(e))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...