Python3 错误和异常

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-4-19

作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。

Python 有两种错误很容易辨认:语法错误和异常。

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

语法错误
Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例

>>> while True print('Hello world')
File "", line 1, in ?
while True print('Hello world')
^
SyntaxError: invalid syntax

这个例子中,函数 print() 被检查到有错误,是它前面缺少了一个冒号 : 。

语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。

异常
即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:

实例
>>> 10 * (1/0) # 0 不能作为除数,触发异常
Traceback (most recent call last):
File "", line 1, in ?
ZeroDivisionError: division by zero
>>> 4 + spam*3 # spam 未定义,触发异常
Traceback (most recent call last):
File "", line 1, in ?
NameError: name 'spam' is not defined
>>> '2' + 2 # int 不能与 str 相加,触发异常
Traceback (most recent call last):
File "", line 1, in
TypeError: can only concatenate str (not "int") to str

11楼
DC憨憨 2022-4-19
try/except...else
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
12楼
DC憨憨 2022-4-19
else 子句将在 try 子句没有发生任何异常的时候执行。

13楼
DC憨憨 2022-4-19
以下实例在 try 语句中判断文件是否可以打开,如果打开文件时正常的没有发生异常则执行 else 部分的语句,读取文件内容:

for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
14楼
DC憨憨 2022-4-19
使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。
15楼
DC憨憨 2022-4-19
异常处理并不仅仅处理那些直接发生在 try 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。例如:

>>> def this_fails():
x = 1/0

>>> try:
this_fails()
except ZeroDivisionError as err:
print('Handling run-time error:', err)

Handling run-time error: int division or modulo by zero
16楼
DC憨憨 2022-4-19
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。

17楼
DC憨憨 2022-4-19
以下实例中 finally 语句无论异常是否发生都会执行:

实例
try:
runoob()
except AssertionError as error:
print(error)
else:
try:
with open('file.log') as file:
read_data = file.read()
except FileNotFoundError as fnf_error:
print(fnf_error)
finally:
print('这句话,无论异常是否发生都会执行。')
18楼
DC憨憨 2022-4-19
抛出异常
Python 使用 raise 语句抛出一个指定的异常。

raise语法格式如下:

raise [Exception [, args [, traceback]]]

19楼
DC憨憨 2022-4-19
以下实例如果 x 大于 5 就触发异常:

x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
20楼
DC憨憨 2022-4-19
执行以上代码会触发异常:

Traceback (most recent call last):
File "test.py", line 3, in
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
Exception: x 不能大于 5。x 的值为: 10

评论

登录后才可发表内容
  • 主题

    31

  • 帖子

    8085

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0629s Mem:2117Kb