Python:笔记(5)——错误、调试和测试
Python:笔记(5)——错误、调试和测试
错误处理
1、TRY语句
这个和Java中的语法是及其相似的,catach换成except。
说明:同样,不管有没有错误,fianlly都会执行的!
补充一个小知识点,在Java中若有fianlly语句,最后的return是无法被执行到,会报错!
同样,一个方法中只能有一个finally语句返回return,其余的都是无法访问到的,
2、错误类型和继承关系
Python所有的错误都是从BaseException
类派生的,常见的错误类型和继承关系看这里:
BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StopAsyncIteration +-- ArithmeticError | +-- FloatingPointError | +-- OverflowError | +-- ZeroDivisionError +-- AssertionError +-- AttributeError +-- BufferError +-- EOFError +-- ImportError | +-- ModuleNotFoundError +-- LookupError | +-- IndexError | +-- KeyError +-- MemoryError +-- NameError | +-- UnboundLocalError +-- OSError | +-- BlockingIOError | +-- ChildProcessError | +-- ConnectionError | | +-- BrokenPipeError | | +-- ConnectionAbortedError | | +-- ConnectionRefusedError | | +-- ConnectionResetError | +-- FileExistsError | +-- FileNotFoundError | +-- InterruptedError | +-- IsADirectoryError | +-- NotADirectoryError | +-- PermissionError | +-- ProcessLookupError | +-- TimeoutError +-- ReferenceError +-- RuntimeError | +-- NotImplementedError | +-- RecursionError +-- SyntaxError | +-- IndentationError | +-- TabError +-- SystemError +-- TypeError +-- ValueError | +-- UnicodeError | +-- UnicodeDecodeError | +-- UnicodeEncodeError | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning +-- BytesWarning +-- ResourceWarning
3、记录错误
使用Python内置的Logging模块可以非常容易地记录错误信息,这就是Java中的日志系统。
同样是出错,但是程序打印完错误信息会继续执行,并正常退出。
4、抛出异常
如果要抛出异常,首先根据需要,可以定义一个错误的class,选择好继承关系,然后用raise语句抛出一个错误的实例:
说明:若非必要,我们尽量使用Python内置的错误类型,如ValueError、TypeError。
调试
1、断言的使用
凡是用print来辅助查看的地方,都可以用断言来替代,断言的意思是要判断的表达式的值应该为真,如果不为真就抛出AssertionError异常
说明:我们可以这样理解,就是程序执行到某个地方时,某个变量或者表达式的值按理说应该是A,我们就使用断言判断一下,如果是了,不影响执行,不是,会给我们报警信息。
2、Logging
和断言相比,logging不会抛出错误,而且可以输出到文件。它允许你记录信息的级别有debug、info、warning、error等,我们也可以使用
logging.basicConfig(level=logging.INFO)
到我们指定level=INFO时,logging.debug等就不起作用了。具体的使用,我们会在后面的文章中探讨。
3、使用IDE
这个没什么好说的,使用PyCharm、Visual Studio Code等IDE设置断点、单步执行等。