从python中的包导入Error类

时间:2018-01-04 17:40:58

标签: python-3.x exception tkinter

如何在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.')

那么我如何从包中单独导入 ,而不是获取整个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

1 个答案:

答案 0 :(得分:1)

可以从tkinter导入TclError类。要将其设为tk.TclError,只需导入名为tkinter的{​​{1}}:

tk

当然,如果您愿意,您可以只导入import tkinter as tk try: ... except tk.TclError: ... 例外,但在此特定示例中,它实际上doesn't have any actual advantage导入整个模块:

TclError

您的问题声称您必须将其引用为from tkinter import TclError try: ... except TclError: ... ,但这是一个错误的陈述。您可以通过将其导入的名称来引用它。名称是无关紧要的,重要的是实际的异常对象本身。

例如,创建一个名为gui.py的文件,并在该文件中输入:

tk.TclError

接下来,在另一个文件中添加以下代码:

# gui.py
import tkinter as tk
def do_something():
    raise tk.TclError("something bad happened")

运行代码时,您应该看到"我发现了TclError"打印。