@zhangyu756897669
2017-09-19T15:53:49.000000Z
字数 1710
阅读 515
python官方文档
现在你知道写得更复杂的程序了,你可能会发现它们中错误比较复杂。本章介绍了一些工具和技术,用于在程序中找到错误的根本原因,以帮助您更快地修复错误并减少工作量。
在程序员中有一个老笑话,“编写代码占90%的编程。调试代码占其他90%。你的电脑只会做你所说的事情;它不会读你的头脑,做你想要的事情。即使专业的程序员一直在创建错误,所以如果您的程序有问题,请不要气馁。
幸运的是,有几种工具和技术可以确定您的代码正在做什么以及出现哪些错误。首先,您将看到日志记录和断言,这两个功能可以帮助您早日检测到错误。一般来说,您越早遇到错误,就越容易解决。
其次,您将看看如何使用调试器。调试器是IDLE的功能,它一次执行一个程序一个指令,让您有机会在代码运行时检查变量中的值,并跟踪程序的变化。这比运行程序慢得多,但在运行程序时看到实际值是有帮助的,而不是从源代码中推导出可能的值。
当它尝试执行无效代码时,Python会引发一个异常。在第3章中,您将了解如何使用try和except语句来处理Python的异常,以便您的程序可以从预期的异常中恢复。但您也可以在代码中提出自己的例外。提出异常是一种说法,“停止运行此函数中的代码并将程序执行移到except语句”。
异议是通过提高声明来提出的。在代码中,raise语句包括以下内容:
* 加关键字
* 调用Exception()函数
* 一个带有有用的错误消息的字符串传递给Exception()函数
例如,在交互式shell中输入以下内容:
raise Exception('This is the error message.')
如果没有包含引发异常的raise语句的try和except语句,程序就会崩溃并显示异常的错误消息。
通常它是调用函数的代码,而不是函数本身,它知道如何处理expection。所以你通常会在函数中看到一个raise语句,并且在调用该函数的代码中使用try和except语句。例如,打开一个新的文件编辑器窗口,输入以下代码,并将程序另存为boxPrint.py:
def boxPrint(symbol, width, height):
if len(symbol) != 1:
raise Exception('Symbol must be a single character string.')
if width <= 2:
raise Exception('Width must be greater than 2.')
if height <= 2:
raise Exception('Height must be greater than 2.')
print(symbol * width)
for i in range(height - 2):
print(symbol + (' ' * (width - 2)) + symbol)
print(symbol * width)
for sym, w, h in (('*', 4, 4), ('O', 20, 5), ('x', 1, 3), ('ZZ', 3, 3)):
try:
boxPrint(sym, w, h)
except Exception as err:
print('An exception happened: ' + str(err))
- *
- *
OOOOOOOOOOOOOOOOOOOO
O O
O O
O O
OOOOOOOOOOOOOOOOOOOO
An exception happened: Width must be greater than 2.
An exception happened: Symbol must be a single character string.
这里我们定义了一个boxPrint()函数,它使用一个字符,一个宽度和一个高度,并使用该字符来绘制一个具有该宽度和高度的框的图片。此盒子形状打印到屏幕上。
该程序使用除异常之外的异常作为err形式。如果从boxPrint()返回异常对象❶❷❸,则此except语句将其存储在名为err的变量中。然后可以将Exception对象转换为字符串,方法是将其传递给str()以产生用户友好的错误消息❺。当您运行此boxPrint.py时,输出将如下所示:
使用try和except语句,您可以更加优雅地处理错误,而不是让整个程序崩溃。