python - 显示从 python 到 tkinter 的实际异常消息
问题描述
我正在使用 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")
谢谢
解决方案
也许您之前没有使用异常。无论您是否使用 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 错误消息可能值得一读。
推荐阅读
- spring - Keycloak - 找不到指定孩子的公钥
- java - 断言对象是一个有效的顶级 json 可序列化
- google-cloud-platform - 当我使用 Google Cloud Application Flex 提供的 Memcache 服务时,“session_memcached_host:”会是什么。引擎?
- angular - 具有延迟加载和子路由设置的 Angular
- javascript - matter.js 物理引擎中的结果总是不同的
- android - java.lang.NullPointerException:空对象引用上的 FloatingActionButton.setVisibility(int)'
- django - Django selenium:i18n 部分有效
- r - NA 使用 pivot_wider
- python - 从数据集中生成 Wordcloud,仅使用一列
- python - 具有条件增量的 Python-For 循环的行为(给出错误的输出)