向Python追溯添加变量

2020-11-30 13:44:04

使用非常简单,但是在需要时可以通用。尝试进行调试,并保持生产状态。

“无用的工作使人的心灰暗。” – Ursula K. Le Guin

厌倦了将所有变量放入调试异常消息的无用工作?只需停止它即可。自动化并清理代码。一劳永逸。

def main():sizes_str = sys.argv [1] h1,w1,h2,w2 = map(int,sizes_str.split())-尝试:返回get_avg_ratio([h1,w1],[h2,w2])-例外:-logger.error(发生了某事:(,变量= {locals()[:1000]}'))-提高-#或-提高MyToolException(发生了某事:(,变量= {locals()[ :: 1000]}')def get_avg_ratio(size1,size2):-尝试:在[size1,size2]中返回均值(get_ratio(h,w)表示h,w。)-除外:-logger.error(f's something something: (,size1 = {size1},size2 = {size2}')-提高-#或-提高MyToolException(发生了某事:(,size1 = {size1},size2 = {size2}')def get_ratio(高度,宽度):-尝试:返回高度/宽度-例外:-logger.error(发生了某些事情:(,width = {width},height = {height}')-提高-#或-提高MyToolException(发生了某些事情:(,width = {width},height = {height}')

+从traceback_with_variables导入activate_by_import def main():sizesstr = sys.argv [1] h1,w1,h2,w2 = map(int,sizes_str.split())返回get_avg_ratio([h1,w1],[h2,w2] )def get_avg_ratio(size1,size2):返回平均值([size1,size2]中h,w的get_ratio(h,w))def get_ratio(height,width):返回高度/宽度

具有变量的回溯(最近一次调用最近):文件“ ./temp.py”,第7行,主返回中get_avg_ratio([h1,w1],[h2,w2])Sizes_str ='300 200 300 0'h1 = 300 w1 = 200 h2 = 300 w2 = 0文件“ ./temp.py”,第10行,在get_avg_ratio中,返回均值([[size1,size2]中h,w的[get_ratio(h,w)])size1 = [300, 200] size2 = [300,0] 中的文件“ ./temp.py”,第10行,返回均值([[size1,size2]中h,w的[get_ratio(h,w)]).0 = h = 300 w = 0文件“ ./temp.py”,第13行,在get_ratio返回高度/宽度高度= 300宽度= 0builtins.ZeroDivisionError:被零除

2020-03-30 18:24:31主要错误使用变量进行追溯(最近一次调用为最新):2020-03-30 18:24:31主要错误文件“ ./temp.py”,位于main2020-03中的第7行-30 18:24:31主要错误返回get_avg_ratio([h1,w1],[h2,w2])2020-03-30 18:24:31主要错误Sizes_str ='300 200 300 0'2020-03-30 18 :24:31主要错误h1 = 3002020-03-30 18:24:31主要错误w1 = 2002020-03-30 18:24:31主要错误h2 = 3002020-03-30 18:24:31主要错误w2 = 02020-03-30 18:24:31主要错误文件“ ./temp.py”,第10行,位于get_avg_ratio2020-03-30 18:24:31主要错误返回均值([get_ratio(h,w)for h, w in [size1,size2]])2020-03-30 18:24:31主要错误size1 = [300,200] 2020-03-30 18:24:31主要错误size2 = [300,0] 2020-03 -30 18:24:31主错误文件“ ./temp.py”,2020-03-30中的第10行,主错误返回均值([h的[get_ratio(h,w), w in [size1,size2]])2020-03-30 18:24:31主要错误.0 = 2020-03-30 18:24:31主要错误h = 3002020-03-30 18 :24:31主要错误w = 02020- 03-30 18:24:31主要错误文件“ ./temp.py”,第13行,在get_ratio2020-03-30 18:24:31主要错误中返回高度/宽度2020-03-30 18:24:31主要错误高度= 3002020-03-30 18:24:31主要错误宽度= 02020-03-30 18:24:31主要错误buildins.ZeroDivisionError:除以零

def make_a_cake(糖,鸡蛋,牛奶,面粉,盐,水):is_sweet =糖>盐is_vegan =不(鸡蛋或牛奶)is_huge =(糖+鸡蛋+牛奶+面粉+盐+水> 10000)如果不是(is_sweet或is_vegan或is_huge):引发ValueError('这是不可接受的,猜测原因!')...

步骤1:注意生产服务中的某些异常。步骤2:添加更多打印输出,日志记录和异常消息。步骤3:重新运行服务。步骤4:等待(希望)该错误重复发生。步骤5:检查打印输出,并可能添加更多信息(然后返回步骤2)。步骤6:清除所有最近添加的打印输出,日志记录和异常消息。步骤7:出现错误后,请返回步骤1。

file_在哪里打印异常,文件或打包的记录器,默认= sys.stderr,即通常打印到控制台

在程序的开头调用一次,以更改未捕获的异常后回溯的方式。

函数装饰器,用于记录或简单打印带有变量的作用域跟踪。即traceback较短,因为它仅包含函数调用内的帧。由于未处理的异常而退出程序仍会打印通常的回溯。

上下文管理器(即...),用于记录或简单打印带有变量的作用域跟踪。即追溯较短,因为它仅包含with范围内的帧。由于未处理的异常而退出程序仍会打印通常的回溯。

默认的Windows控制台/终端无法打印[所谓的ansi]颜色,但这是可以修复的,尤其是在现代Windows版本中。因此,默认情况下颜色是禁用的,但是您可以启用它们并检查它是否适用。您可以通过传递--color-scheme common(对于完整的颜色列表,通过--help)控制台参数来强制启用颜色。

默认的Windows控制台/终端无法打印[所谓的ansi]颜色,但这是可以修复的,尤其是在现代Windows版本中。如果由于某种原因默认启用了错误的颜色,则可以通过传递--color-scheme none控制台参数来强制禁用颜色。

bash之类的bash工具在与管道(|)一起使用时有时会由于颜色而无法消化输出。

请通过传递--color-scheme none控制台参数来禁用颜色。选择在管道输出中保留颜色是为了方便使用头,尾,文件重定向等。 grep可能有问题,在这种情况下,您可以禁用颜色。

当我选择它时,以> output.txt方式重定向到文件的输出没有颜色。

这是一种罕见的用例,因此在输出到文件时默认情况下禁用颜色。但是您可以通过传递--color-scheme common(对于完整的颜色列表通过--help)控制台参数来强制启用颜色。

activate_by_import或override_print_tb在Jupiter或IPython中不起作用,好像根本没有调用一样。

不要忘记使用ipython = True或导入activate_in_ipython_by_import,因为Jupyer / Ipython处理异常的方式与常规Python不同。