程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Python 基础教程七之Python3 错误和异常

balukai 2025-04-09 14:08:11 文章精选 11 ℃



1、什么是异常

Python中的异常指的是Python程序发生的不正常事件。有时候,异常也可称为错误。当检测到错误时,Python解释器就无法继续执行,此时会出现一些错误的提示,这就是异常,也就是我们常说的BUG。

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

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

2、语法错误

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

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

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

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

3、Python异常

Python异常是指在Python程序运行过程中发生的错误或意外情况,这些异常会导致程序的控制流发生改变,通常会导致程序停止执行,直到找到能够处理该异常的代码或者程序崩溃。Python提供了多种内置的异常类型,用于表示不同的错误类型,例如:

SyntaxError:代码不符合Python的语法规则时抛出,例如使用了错误的缩进或冒号位置。

NameError:尝试访问一个未定义的变量时抛出。

TypeError:操作或函数使用了错误的数据类型时抛出,例如将字符串和整数相加。

IndexError:索引超出序列的范围时抛出,例如访问列表中不存在的索引。

KeyError:字典中查找一个不存在的键时抛出。

ValueError:传入函数的值具有正确的类型但不在预期范围内时抛出,例如将非数字字符串转换为整数。

AttributeError:尝试访问一个对象的未知属性或方法时抛出。

ImportError:导入模块失败时抛出。

4、异常处理

4.1、try/except

Python提供了异常处理机制,通过try-except语句可以捕获并处理这些异常,防止程序崩溃。基本语法如下:

try:
    # 可能发生异常的代码
except Exception as e:
    # 处理异常的代码
import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("os error:{0}".format(err))
except ValueError:
    print("could not convert data to an integer.")
except:
    print("unexpected error:",sys.exc_info()[0])

通过这种方式,程序可以在发生异常时执行特定的错误处理代码,从而继续执行或给出错误提示,而不是完全崩溃。

try 语句按照如下方式工作;

  • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
  • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
  • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
  • 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

4.2、try/except...else

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。

else 子句将在 try 子句没有发生任何异常的时候执行。

import sys

x = 0
while True:
    try:
        x = int(input("请输入一个数字:"))
    except (RuntimeError,TypeError,NameError):
        print("您输入的不是数字,请再次尝试输入!")
    except:
        print("error:",sys.exc_info()[0])
    else:
        print(x)

4.3、try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。

from clickhouse_sqlalchemy import make_session
from sqlalchemy import create_engine
from sqlalchemy.sql import text
import sys;

connection = "clickhouse://default:123456@localhost/launch"
engine = create_engine(connection, pool_size=100, pool_recycle=3600, pool_timeout=10)
clickhouse_cursor = make_session(engine=engine)
# sql='show tables;'
query_result = clickhouse_cursor.execute(text('select * from launch.users'))
try:
    fields = query_result._metadata.keys  # 字段名
    print(fields._keys)
    for item in query_result.fetchall():  # 具体内容
        print(item)
except:
    print("Unexpected error:", sys.exc_info()[0])
finally:
    query_result.close()
    clickhouse_cursor.close()

Tags:

最近发表
标签列表