Python:笔记(5)——错误、调试和测试

Python:笔记(5)——错误、调试和测试

错误处理

  1、TRY语句

    这个和Java中的语法是及其相似的,catach换成except

  Python:笔记(5)——错误、调试和测试

说明:同样,不管有没有错误,fianlly都会执行的

补充一个小知识点,在Java中若有fianlly语句,最后的return是无法被执行到,会报错!

Python:笔记(5)——错误、调试和测试

同样,一个方法中只能有一个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中的日志系统。

  Python:笔记(5)——错误、调试和测试

  同样是出错,但是程序打印完错误信息会继续执行,并正常退出。

  4、抛出异常

    如果要抛出异常,首先根据需要,可以定义一个错误的class,选择好继承关系,然后用raise语句抛出一个错误的实例:

  Python:笔记(5)——错误、调试和测试

说明:若非必要,我们尽量使用Python内置的错误类型,如ValueError、TypeError。

调试

  1、断言的使用

    凡是用print来辅助查看的地方,都可以用断言来替代,断言的意思是要判断的表达式的值应该为真,如果不为真就抛出AssertionError异常

  Python:笔记(5)——错误、调试和测试

说明:我们可以这样理解,就是程序执行到某个地方时,某个变量或者表达式的值按理说应该是A,我们就使用断言判断一下,如果是了,不影响执行,不是,会给我们报警信息。

   2、Logging

    和断言相比,logging不会抛出错误,而且可以输出到文件。它允许你记录信息的级别有debug、info、warning、error等,我们也可以使用

logging.basicConfig(level=logging.INFO)

    到我们指定level=INFO时,logging.debug等就不起作用了。具体的使用,我们会在后面的文章中探讨。

  3、使用IDE

    这个没什么好说的,使用PyCharm、Visual Studio Code等IDE设置断点、单步执行等。

上一篇:tcp的发送端一个小包就能打破对端的delay_ack么?


下一篇:Android开发者的Git&Github(一)