- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一起问这些问题是因为我觉得他们在一起。做一个的方式影响我必须如何做另一个。我是计算机科学/编程/python 新手。
我有一个很长、很复杂的脚本,它不包含任何用户定义的函数。它接受输入并对其进行操作以形成输出。我用 Tkinter 构建了一个 GUI,供用户输入数据。我想在我的 GUI 主循环中运行我的脚本,并让脚本向 GUI 打印状态更新和错误。
GUI 打印错误 :我已经搜索并搜索了可能的解决方案,但我没有设法破解它。
Using a subprocess 看起来最有希望,但我相信子进程必须是 .exe 文件才能使其正常工作。我只有一个 Python 脚本,不知道如何将某些东西转换为可执行文件(但无论如何我需要尽快学习)。至于该页面上带有 sys 模块的第二个响应,我只是不明白“run_script”函数中发生了什么以将其应用于我自己的 GUI。
There's this "show error" solution 但我也不确定我是否真的理解这一点。这是否是说我需要将 Try...Except...
放在我的下标中的所有函数上并让它返回一个消息框?呸。我真的更喜欢像在命令结果/IDE中那样打印异常并退出命令。该页面上的回溯解决方案是否会是一种一次性的事情,我在我的 GUI 中声明过一次并让它适用于 GUI 中的所有功能?还是每次执行计算时都必须调用该 show_error 函数?
合并下标 :我意识到合并下标的方式会影响消息在 GUI 中的打印方式。我的下标 ( print "Loading modules..."
) 中有一堆打印语句,让用户知道程序正在运行。在继续之前,这是我正在使用的代码示例。
这是我的 GUI 代码的缩短版本:
import Tkinter
###____________Widgets__________________###
class InputBox(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self, parent)
self.parent = parent
self.initialize()
def initialize(self):
# Frame
self.OK = Tkinter.Frame(self, padx=3, pady=3)
self.OK.grid(column=2, row=2, columnspan=3, sticky="EW")
self.printFrame = Tkinter.LabelFrame(self, borderwidth=3, relief="ridge", padx=3, pady=3, text="Results")
self.printFrame.grid(column=0, row=3, columnspan=4, sticky="EW")
# Approval
self.OKbutton = Tkinter.Button(self.OK, text=u"OK", command=self.OKgo, anchor="e")
self.OKbutton.pack(side="right")
self.view = Tkinter.Text(self.printFrame)
self.view.grid(column=0, row=0, columnspan=3, sticky="EW")
self.scroll = Tkinter.Scrollbar(self.printFrame, orient=Tkinter.VERTICAL)
self.scroll.config(command=self.view.yview)
self.view.config(yscrollcommand=self.scroll.set)
self.scroll.grid(column=4, row=0, sticky="SN")
def OKgo(self):
# Load Inputs
DEMin = self.demEntryVar.get()
WTin = self.wtEntryVar.get()
soil = self.soilEntryVar.get()
# Convert soils shapefile to raster and assign integer values to HSG.
# A=1, B=2, C=3, 4=D and dual groups A/D=14, B/D=24, C/D=34
# "---" is treated as a D soil
import arcpy
print("Converting dual group soils to single groups...")
SoilUnclass = arcpy.PolygonToRaster_conversion(soil, "HSG", ScratchPath + r"\SoilUnclass", "MAXIMUM_COMBINED_AREA")
SoilClass = arcpy.sa.Reclassify(SoilUnclass, "HSG", arcpy.sa.RemapValue([["A", 1],
["B", 2],
["C", 3],
["D", 4],
["A/D", 14],
["B/D", 24],
["C/D", 34],
["---", 4]]), "NODATA")
SoilClass.save(ScratchPath + r"\HSGras")
OKgo
函数中,我可以通过将所有打印语句更改为
self.view.insert("end", "Converting soils... \n")
来将其打印到 Text 小部件。据我了解,将我的整个下标粘贴到
OKgo
函数中是不可取的,因为它会卡住 GUI 并且通常很长。下标可能需要很长时间才能运行,所以这不是首选。
OKgo
函数中单独调用它们,例如
import subscript as ss
ss.soilconvert(soil)
Try...Except...
事情,甚至认为它会卡住 GUI。但是,需要一个函数的输出作为下一个函数的输入,但我不知道如何调用它们。我也不知道如何将
print
语句转换为可以读入 Text 小部件的内容。
execfile
的东西,但我觉得将输出输入到 Text 小部件中更加困难。 :/我不知道任何编程约定,也不知道什么会更容易调试/更新。我需要一些方向,拜托。谢谢。
multiprocessing
版本创建了一个单线程版本。我做了这样的事情:
Python multiprocessing redirect stdout of a child process to a Tkinter Text 捕获
stdout
并将其打印到 GUI。我仍在尝试使异常正常工作。以与重定向
sys.stderr
相同的方式重定向
sys.stdout
不起作用,但我还没有尝试
sys.excepthook
的事情。
最佳答案
您可以使用 sys.excepthook
捕获所有异常并显示它们。 : 只是
将其替换为您自己的功能,该功能将打开一个消息框
如果需要,错误回溯并退出:
import sys, traceback
def my_except_hook(type, value, traceback):
exception_string = "".join(traceback.format_exception(type, value, traceback))
# do whatever you want from here
print exception_string
sys.excepthook = my_except_hook
execfile
解决方案
sys.stdout
和
sys.stderr
,但是使用
subprocess
模块可能更适合避免损坏
关于python - 两件事 : 1) Printing errors/tracebacks/exceptions to GUI and 2) The best way to utilize a script within a script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814802/
如何确保在不包括整个回溯的情况下打印出失败的实际行?追溯对我来说可能太长了,所以我也把它全部打印出来。 此代码仅打印函数 a 和 b 中的错误,但我想查看实际错误发生在函数 d 中。 import t
我有以下内容: try: package_info = __import__('app') #app.py except: print traceback.extract_tb(sys
我有 2 个模块: a.py: import b import traceback try: print b.get_val(1) except Exception as ex: tr
我的 Python 脚本崩溃了。为了调试它,我以交互模式运行它 python -i example.py Traceback (most recent call last): File "exam
我刚开始在 rstudio 中进行调试。一开始一切都按照描述的方式工作 here . 我使用后 browser() ,我无法回到这个状态,也就是说没有互动区,我可以在那里按hide traceback
使用 Lua 演示页面中的以下代码,我试图获取被调用函数的名称。 function test() local info = debug.getinfo(1); for k, v in
假设我有一个非常简单的代码会引发错误: print(1/0) 如何将完整的回溯错误保存到文件中,以便该文件包含: Traceback (most recent call last): File "
我正在编写一个自定义错误处理程序(使用error选项),主要用于与source运行的程序一起使用。在自定义错误处理程序中,我想计算导致错误的源文件的行号。 通常,每当引发错误时,都会将基本环境中的.T
我遇到过 R 中 .Traceback 对象的奇怪行为。 当我尝试打印简短的错误消息时,没问题,.Traceback[[1]] 有一个元素。但是当我尝试打印很长的字符串时,.Traceback[[1]
我发现为一个简单的失败的单元测试获取如此多的细节有点烦人。除了实际定义的断言消息之外,是否可以抑制所有内容? Creating test database for alias 'default'...
我有一个简单的脚本: i=1 while True: try: print i except KeyboardInterrupt: raise Exce
我已经开始编码大约一个星期了,在练习创建一个形状计算器时,我遇到了这样的错误: Traceback (most recent call last): File "python", line 4 if
在测试我使用 rest api 制作的应用程序时,我发现了这种我不理解的行为。 让我们从重现类似的错误开始,如下所示 - 在文件 call.py - 请注意,此文件包含以视觉方式显示自身的代码,例如一
我想查看代码到特定点的完整轨迹 我也是 ... import traceback traceback.print_stack() ... 然后会显示 File ".venv/lib/python3
traceback 模块非常适合捕获和处理异常,但在下面的示例中,它似乎从最近的异常中捕获了一个不完整的堆栈。 考虑两个文件,一个是“mymod.py”: import sys, traceback
我正在尝试对回溯进行一些详细的重新检查并获取实际值来自未能返回更多(更好?)信息的对象回溯。 案例场景在我导入并执行的函数中,如下所示: def foo(): a = True b =
是否可以在 Python 中创建自定义回溯?我正在尝试编写一个函数 raise_from() 来模仿 Python 3 的 raise ... from ...。 def raise_from(exc
我在运行代码时遇到了 Mechanize 问题,我不知道问题出在哪里,也许有人可以帮助我。 > ****************************************************
需要帮忙 我想要的是 : 我想录制麦克风并从 txt 文件中获取持续时间 代码: import sounddevice as sd import numpy as np import scipy.io
令我惊讶的是,当我获取文件时,很难在 R 中准确找到错误发生的位置。例如: > source('Data-Generation.R') ... # some output here Error in
我是一名优秀的程序员,十分优秀!