【发布时间】:2018-01-04 17:40:57
【问题描述】:
如何在 python 中导入 Error 类(并且只有错误类,而不是命名空间)以用于异常处理?
不打算使用的内容:
from tkinter import _tkinter as tk
try:
...
except tk.TclError:
print('Oops. Bad window path.')
我已经尝试了上述方法,但这样做也会将一堆其他我不需要的东西导入我的命名空间,我还需要使用 tk.TclError 来引用它,而不是简单的 TclError。
我尽量避免,因为它导入了我不需要的整个包,我只需要处理异常:
import tkinter as tk
try:
...
except tk.TclError:
print('Oops. Bad window path.')
那么我如何从包中单独导入 Error 类,不获取整个 tkinter 命名空间,如果这是可能的或可推荐的?
我有两个独立的程序,这里我将它们称为 A 和 B 以缩短它。
我想要达到的目标
A.py
## Communicator ##
import B
#... Some irrelevant code ...
GUI = B.start()
try:
#Tell the GUI to modify something, for example:
GUI.entry.insert(0, 'Input')
except TclError:
#Modification failed due to Bad Window Path
B.py
## GUI ##
import tkinter as tk
#Little Function to give the Communicator the required object to start/handle the GUI
def start():
root = tk.Tk()
run = Alarmviewer(root)
return run
#... GUI initialization, creating/destroying of windows, modifications, etc
【问题讨论】:
-
你为什么要导入
_tkinter?这不是为 tkinter 包以外的其他人设计的。为什么一定要用tk.TclError?这没有多大意义。您能解释一下您要解决的更大的问题是什么吗? -
好的。一点澄清。提到的 .py 我收到错误没有导入 tkinter,这是需要的,因为有一个单独的 .py 可以处理 GUI 元素。但是,由于我仍然需要以某种方式告诉 GUI 元素进行修改,因此有时会在所述 GUI 元素不存在时出现 TclError。
-
很抱歉,但这没有多大意义。我不明白为什么不能在需要捕获 TclError 的任何代码中导入 tkinter。你能提供一个minimal reproducible example吗?
-
您似乎试图将您的 GUI 代码和非 GUI 代码分开,并且非 GUI 代码需要捕获与 GUI 相关的错误。那是对的吗?为什么不让您的非 GUI 代码从您的 GUI 代码中导入
TclError?让你自己的 GUI 代码导出它。
标签: python-3.x exception tkinter