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