首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 自动化指南(繁琐工作自动化)第二版:十一、调试

使用try和except语句,您可以更优雅地处理错误,而不是让整个程序崩溃。 获取字符串形式的回溯 当 Python 遇到错误时,它会产生一个称为回溯的错误信息宝库。...回溯包括错误消息、导致错误的行的行号以及导致错误的函数调用序列。这个调用序列被称为调用栈。...从回溯中,您可以看到错误发生在第 5 行的bacon()函数中。这个对bacon()的调用来自第 2 行的spam()函数,该函数在第 7 行被调用。...用户不会关心你需要看到的帮助调试的一些字典值的内容;使用日志消息来做类似的事情。对于用户希望看到的消息,如文件未找到或输入无效,请输入一个号码,您应该使用print()调用。...当您单击“调试”按钮时,程序暂停在第 1 行,这是它将要执行的代码行。Mu 应该看起来像图 10-1 。 点击上方的跳过一次,执行第一次print()调用。

1.5K40

Python 进阶指南(编程轻松进阶):一、处理错误和寻求帮助

当这种情况发生时,Python 会显示异常的消息和一个回溯。也被称为栈跟踪,回溯显示程序中发生异常的位置以及导致异常的函数调用的踪迹。...most recent call last文本表示每个函数调用都按顺序列出,从第一个函数调用开始,到最近一个函数调用结束。...回溯显示了导致崩溃的每一帧的帧摘要。我们可以看到这个函数调用在abcTraceback.py的第 13 行,module>文本告诉我们这一行在全局范围内。第 13 行显示后有两个空格的缩进。...我们可以从line 3, in a文本中得知,b()在a()函数内部的第 3 行被调用,导致c()在b()函数内部的第 7 行被调用。...注意,第 2、6 和 10 行上的print()调用没有显示在回溯中,即使它们在函数调用发生之前运行。只有包含导致异常的函数调用的行才会显示在回溯中。

95330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python基础 | 新手学Python时常见的语法错误和异常

    文件名和行号也会被输出,以便输入来自脚本文件时你能知道去哪检查。...错误消息的开头部分以堆栈回溯的形式显示发生异常的上下文:通常它会包含列出源代码行的堆栈回溯;但是,它将不会显示从标准输入读取的行。 ?...call last): File "", line 1, in module> num = int(input('请输入一个整数...:')) ValueError: invalid literal for int() with base 10: 'a' 比如当我们使用int对输入对象进行转化为整数时,输入的对象是字符串时,这是一个不合适的参数...KeyboardInterrupt:当用户按下中断键 (通常为 Control-C 或 Delete) 时 In [18]: num = int(input('请输入一个整数:')) 请输入一个整数:

    7.1K41

    第六十七期:Node中的栈追踪

    这个记录本质上是一个递归调用。 这个错误消息非常明显,【cannot read property 'ohoh' of undefined】。...但是因为我们的堆栈被限制为10帧,所以我们无法看到最初调用函数第一次迭代的内容。 通过使用 --stack-trace-limit 标识,我们可以解决这个问题。...node --stack-trace-limit=21 index.js 这时候,我们可以看到错误出现在app/routes.js的第7行第12列。...routes.js的第7行内容如下: res.send(content()) 调用content方法时参数为空,所以就报错了。...stack-trace-limit 标识是如何工作的 stack-trace-limit标识通知V8引擎在每个事件循环的tick中维护更多的stack,当程序出现错误时,生成一个可以回溯到最初调用函数的追踪栈

    1.2K20

    Python抛出异常_python抛出异常的作用

    ,比如foo.x,但是foo没有属性x IOError #输入/输出异常;基本上是无法打开文件 ImportError #无法引入模块或包;基本上是路径问题或名称错误...#我们平时用if做的一些简单的异常处理 num1=input('>>: ') #输入一个字符串试试 if num1.isdigit(): int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴...当PYthon脚本以_()选项编译为字节码文件是,assert语句将被移除以提高运行速度。...出来 用sys模块回溯最后的异常 当发生异常时Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这是可以使用sys模块回溯最近一次异常。...如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。 每次执行 raise 语句,都只能引发一次执行的异常。

    2.5K70

    【说站】python列表删除项目的方法

    (最近一次调用最后一次):   文件“”,第 1 行,在   ValueError: list.remove(x): x 不在 list2 中 2、使用list对象的pop方法。...>>> myList.pop(1) 1 >>> 我的列表 ['prem', 3, 'sai', 2, 3, 1] >>> myList.pop(7) 回溯(最近一次调用最后一次):   文件“”,第 1 行,在   索引错误:弹出索引超出范围 3、使用操作符del。...此运算符获取要删除的项目的索引并删除该索引处的项目。 该运算符还支持删除列表中的一系列项目。如果我了解列表中的项目,这是我删除项目的首选方式。这是删除项目的清晰快捷的方法。...(最近一次调用最后一次):   文件“”,第 1 行,在   IndexError:列表分配索引超出范围 以上就是python列表删除项目的方法,希望对大家有所帮助。

    1.4K30

    Python 自动化指南(繁琐工作自动化)第二版:一、PYTHON 基础知识

    不过,错误信息不会让你的电脑崩溃,所以不要害怕犯错。崩溃仅仅意味着程序意外停止运行。 如果您想了解有关错误的更多信息,可以在线搜索准确的错误消息文本以获取更多信息。...同样,如果您输入了错误的 Python 指令,Python 将无法理解它,并将显示一条SyntaxError错误消息,如下所示: >>> 5 + File "", line 1...不要担心损坏计算机:最坏的情况是 Python 会响应一条错误消息。专业软件开发人员在编写代码时总是会收到错误消息。...你的第一个程序 虽然交互式 Shell 适合一次运行一条 Python 指令,但是要编写整个 Python 程序,您需要将指令输入到文件编辑器中。...如果您调用input()并看到一条类似于NameError: name 'Al' is not defined的错误消息,问题是您正在用 Python 2 而不是 Python 3 运行代码。

    1K31

    你一定遇到过Python中的无效语法:SyntaxError---常见原因以及解决办法

    : 43 ^ SyntaxError: invalid syntax 注意,traceback消息定位的错误在第5行,而不是第4行。...异常类型SyntaxError之后的错误消息,可以提供帮助您确定问题的信息 在上面的例子中,给出的文件名是theofficefacts。...现在,print(foo())的调用被添加为列表的第四个元素,Python到达了文件的末尾,但没有使用右括号。回溯告诉您,Python已经到达了文件(EOF)的末尾,但是它还在期待其他内容。...Python指出问题所在,并给出有用的错误消息。它清楚地告诉您,在同一个文件中,制表符和空格用于缩进。...last): File "", line 1, in module> TypeError: 'tuple' object is not callable 这个类型错误意味着您不能像调用函数那样调用元组

    28.8K20

    python基础教程:错误处理和异常处理

    错误是由箭头指示的位置上面的 token 引起的(或者至少是在这里被检测出的)。文件名和行号也会被输出,以便输入来自脚本文件时你能知道去哪检查。...> ----> 1 10 + '1' TypeError: unsupported operand type(s) for +: 'int' and 'str' 我们看到,异常有不同的类型,其类型名称会作为错误信息的一部分中打印出来...错误信息的前一部分以堆栈回溯的形式显示发生异常时代码的上下文。一般它包含列出源代码行的堆栈回溯;但是它不会显示从标准输入中读取的行。...我们看看下面的代码,它将一次打印B,C,D。...但是它可用于打印错误消息,然后重新引发异常(同样允许调用者处理异常): import sys try: f = open('zzz.txt') s = f.readline()

    1K20

    Python中sys模块

    它们的含义是:type获取正在处理的异常的异常类型(类对象); value获取异常参数(其 关联值或第二个参数,如果异常类型是类对象,则始终为类实例); traceback 获取一个回溯对象(参见参考手册...sys.last_type sys.last_value sys.last_traceback 这三个变量并不总是定义的; 它们在未处理异常时设置,并且解释器打印错误消息和堆栈回溯。...事件具有以下含义: 'call' 调用一个函数(或输入一些其他代码块)。调用配置文件功能; arg是None。 'return' 函数(或其他代码块)即将返回。...sys.stdin sys.stdout sys.stderr 与解释器的标准输入,输出和错误流相对应的文件对象。...解释器自己的提示和(几乎所有)其错误消息都会转到stderr。 stdout并且 stderr不需要是内置文件对象:任何对象都是可接受的,只要它有一个write()带字符串参数的方法即可。

    1.4K50

    LeetCode 刷题笔记——递归与回溯的理解

    一看代码,形式同样也是反复调用函数自身,感觉这和递归并没什么区别啊? 于是多做了几道关于递归和回溯的问题,并在网上找了一些大神们的言论,自己对递归和回溯进行一些总结如下。...我们选择了一个方向,后来发现又有一个多岔路口,这时候又需要进行一次选择。所以我们需要在上一次尝试结果的基础上,再做一次尝试,即在函数内部再调用一次函数,这就是递归的过程。...具体的实现思路如下: 建立字典映射表; 从后向前遍历当前数字字符串; 若当前数字字符串长度超过 1,则从当前字符串的第 2 位到末尾作为子字符串,将该子串作为输入参数,重新输入该函数,这里即为递归的实现...回溯例题 回溯问题给我个人的感觉,就是感觉在做之前设想了各种边界条件和可能情况,结果都没有什么卵用,最终出来的结果还各种错误。...目前做的关于回溯的问题比较少,但 LeetCode 的第 22 题:Generate Parentheses,十分具有代表性。

    3.1K30

    python模块之sys

    ,exc_type,exc_value,exc_traceback当前处理的异常详细信息 sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息 sys.exec_prefix...返回python文件安装的位置 sys.exit(n) 退出程序,正常退出时exit(0) sys.hexversion 获取python解释程序的版本值,16进制格式如:0x020103F0 sys.version...获取python解释程序的版本信息 sys.displayhook(value) 如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档) sys.excepthook 异常回溯相关...sys.builtin_module_names Python解释器导入的内建模块列表 sys.executable Python解释程序路径 sys.getwindowsversion() 获取Windows...sys.stdin.read() 输入一行 sys.stderr 错误输出 sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息 sys.exec_prefix

    80830

    【Rust学习】20_错误处理_panic!

    会导致最后两行中包含的错误消息。第一行显示了我们的异常消息和源代码中发生异常的位置:src/main.rs:2:5 表示它是 src/main.rs 文件的第二行,第五个字符。...宏调用。在其他情况下,panic!调用可能在我们的代码调用的代码中,错误消息报告的文件名和行号将是其他人代码中调用 panic!宏的地方,而不是最终导致 panic!调用的代码行。...注释:这一行告诉我们,我们可以设置RUST_BACKTRACE环境变量来获取导致错误的确切发生的回溯。回溯是调用所有函数以达到此点的列表。...Rust 中的回溯和其他语言一样工作:读取回溯的关键是从顶部开始阅读,直到看到你写的文件。这就是问题的根源。该点上方的行是您的代码调用的代码;下方的行是调用您的代码的代码。...在上面的输出中,回溯的第6行指向我们项目中导致问题的行:src/main.rs的第4行。如果我们不想让程序出现异常,我们应该从提到我们编写的文件的第一个行所指向的位置开始调查。

    7500

    C语言在嵌入式系统编程时的注意事项

    如: /*module1.h*/ int a = 5; /* 在模块1的.h文件中定义int a */ /*module1 .c*/ #include “module1.h” /* 在模块1中包含模块1...正确的做法是: /*module1.h*/ extern int a; /* 在模块1的.h文件中声明int a */ /*module1 .c*/ #i nclude “module1.h” /* 在模块...1中包含模块1的.h文件 */ int a = 5; /* 在模块1的.c文件中定义int a */ /*module2 .c*/ #i nclude “module1.h” /* 在模块2中包含模块1...a; c = a; 但是这样的优化结果可能导致错误,如果I/O空间0x100端口的内容在执行第一次读操作后被其它程序写入新值,则其实第2次读操作读出的内容与第一次不同,b和c的值应该不同。...整理用户输入 继续第2节的例子,在第2节的onNumKey函数中,只是获取了数字的每一位,因而我们需要将其转化为有效数据,譬如要转化为有效的XXX数据,其方法是: /* 从2进制数据位转化为有效数据:XXX

    2.5K82

    12 Python 基础: 如何优化代码质量,错误、调试和测试你必须要懂.md

    在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。...解读错误信息是定位错误的关键。我们从上往下可以看到整个错误的调用函数链: 错误信息第1行: Traceback (most recent call last): 告诉我们这是错误的跟踪信息。...第2行: File "err.py", line 11, in module> main() 调用main()出错了,在代码文件err.py的第11行代码,但原因是第9行: File "err.py...", line 9, in main bar('0') 调用bar('0')出错了,在代码文件err.py的第9行代码,但原因是第6行: File "err.py", line 6, in bar...程序也可以主动抛出错误,让调用者来处理相应的错误。但是,应该在文档中写清楚可能会抛出哪些错误,以及错误产生的原因。 调试 程序能一次写完并正常运行的概率很小,基本不超过1%。

    1.3K30

    Python 密码破解指南:0~4

    否则,当您尝试运行程序时,会看到以下错误消息: ImportError: No module named pyperclip 现在您已经下载并安装了 Python 解释器和pyperclip.py模块,...module> TypeError: must be str, not int >>> 'Hello' + '42' 'Hello42' 第一行代码导致错误,因为'Hello'是一个字符串,而42是一个整数..."错误消息,如下面的代码所示: >>> 'Hello'[10] Traceback (most recent call last): File "", line 1, in module...获取用户的输入 第 4 行有一个带有变量(myName)和新函数调用input()的赋值语句: myName = input() 当input()被调用时,程序等待用户输入一些文本并按下enter。...结果,存储在translated中的字符串值一次“增长”一个字符,直到它成为完全加密的字符串。 第 10 行也是一个赋值语句。它获取当前的整数值i并从中减去 1(这被称为递减变量)。

    49040
    领券