百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python | 异常是如何导致的?怎么处理?

off999 2024-11-19 08:33 31 浏览 0 评论

Python的错误和异常

在刚学习Python编程时, 经常会看到一些报错信息,在前面我们没有提及。

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

▲ 程序语法错误:

Python的语法错误或者称之为解析错误,在开发之初经常遇到。

△ 语法错误Error

Python的语法错误或者称之为解析错误,在开发之初经常遇到。

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

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

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

异常Except

运行期检测到的错误被称为异常。

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

异常的格式:

● 异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有ZeroDivisionError,NameError 和 TypeError。

● 错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。

△ 异常的处理的关键字及语法结构

在Python3中使用try..excet..finally关键字处理异常

语法结构:

try:
… 可能出现异常的语句块 …
except 捕获异常的名称:
… 处理异常的语句块 …
finally:
… 异常结束后续执行语句块 …

● Try块中的语句一旦发生异常,则后续语句将会中止执行程序控制流直接跳转至except块中。

● Exept若未能捕获到try块中的异常,则系统报错

● Finally 块中的语句无论是否出现异常均会执行。

● Try块必须伴随except块同时出现,不能独立出现。

△ 异常的处理-多except捕获

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

2.处理程序将只针对对应的try子句中的异常进行处理,而不是其他的try的处理程序中的异常。

3.一个except子句可以同时处理多个异常,这些异常将被放在一 个括号里成为-个元组,例如:

代码演示:

ch05-demo12-except02.py

● exept异常类名称as异常对象:

● 异常对象可以输出报错的具体信息

△ 异常的处理- try..except...else/finally

●try except else语句还有一个可选的else子句,如果使用这个子句,那么必须放

在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。

例如:

代码演示:

ch05-demo13-except03.py

●else中的语句当try块出现异常时不执行 ,当try块没有异常时则执行。

●同样,若替换成finally则无论try块中是否出现异常, finally中的语句块均执行。

△ 自定义条件手动抛出异常

●在Python语言中,并不能解决开发中所有的错误情况。

因此, Python3为我们提供了raise关键字,可以根据我们自身业务的特殊情况,自定义错误条件并手动抛出异常。

代码演示:

●raise唯一-的一 个参数指定了要被抛出的异常。它必须是一一个异常的实例或者是异常的类(也就是Exception的子类)。

●如果你只想知道这是否抛出了一个异常,并不想去处理它,那么-一个简单的raise语句就可以再次把它抛出。

常见异常类型:

AttributeError试图访问-一个对象没有的属性,比如foo.x ,但是foo没有属性x

IOError输入/输出异常;基本.上是无法打开文件

ImportError无法引入模块或包;基本.上是路径问题或名称错误

IndexError下标索引超出序列边界, 比如当x只有三个元素,却试图访问x[5]

KeyError试图访问字典里不存在的键

NameError尝试访问一个没有申明的变量

SyntaxError Python代码非法,代码不能编译

TypeError传入对象类型与要求的不符合

UnboundLocalError试图访问-一个还未被设置的局部变量,

ValueError传入-一个调用者不期望的值,即使值的类型是正确的

相关推荐

Kubernetes 核心概念全景图:Pod、Node、Cluster、Control Plane 等

想真正读懂Kubernetes的底层运作,你必须理解它的“权力架构”。Pod是什么?Node是什么?ControlPlane又是做什么的?它们之间有什么关系?怎么协同工作?本篇带你构建一个...

Helm 实战:用 Helm 部署一个 Nginx 应用

这一篇,我们将动手实战:用Helm从零部署一个Nginx应用,并掌握HelmChart的结构和参数化技巧。一、准备环境在开始之前,你需要确保环境中具备以下工具:已部署的Kubernet...

从零开始:如何在 Linux 上搭建 Nginx + Node.js 高性能 Web 服务

在现代互联网服务架构中,Nginx+Node.js已成为轻量级、高性能网站的首选组合。本文将带你从零开始,一步步搭建一个高并发、高可用的Web服务平台,让新手也能轻松掌握生产级部署思路。一、...

NetBox 最新版 4.4.1 完整安装指南

NetBox最新版4.4.1完整安装指南(修正版)by大牛蛙1.系统准备#关闭SELinux和防火墙(仅测试环境)systemctldisable--nowfirewalldse...

Termux 安装 linux 宝塔面板,搭建 Nginx+PHP+Mysql web 网站环境

Termux安装linux宝塔面板,搭建Nginx+PHP+Mysqlweb服务环境,解决启动故障奶妈级教程1.到宝塔面板官网:https://www.bt.cn/new/download...

OpenEuler系统安装Nginx安装配置_openwrt安装nginx

NginxWEB安装时可以指定很多的模块,默认需要安装Rewrite模块,也即是需要系统有PCRE库,安装Pcre支持Rewrite功能。如下为安装NginxWEB服务器方法:源码的路径,而不是编...

多级缓存架构实战:从OpenResty到Redis,打造毫秒级响应系统

在传统的Web架构中,当用户发起请求时,应用通常会直接查询数据库。这种模式在低并发场景下尚可工作,但当流量激增时,数据库很容易成为性能瓶颈。多级缓存通过在数据路径的不同层级设置缓存,可以显著降低数据库...

如何使用 Nginx 缓存提高网站性能 ?

快速加载的站点提供了更好的用户体验并且可以拥有更高的搜索引擎排名。通过Nginx缓存提高你的网站性能是一个有效的方法。Nginx是一个流行的开源web服务器,也可以作为web服务器反向代...

如何构建企业级Docker Registry Server

很多人问我,虚拟机镜像和docker镜像的区别是什么?其实区别非常明显,我们可以通过阅读Dockerfile文件就可以知道这个镜像都做了哪些操作,能提供什么服务;但通过虚拟机镜像,你能一眼看出来虚拟机...

如何解决局域网SSL证书问题?使用mkcert证书生成工具轻松搞定

“局域网里弹出‘不安全’红锁,老板就在身后盯着演示,那一刻只想原地消失。”别笑,九成前端都经历过。自签证书被Chrome标红,客户以为网站被黑,其实只是缺一张被信任的证。mkcert把这事从半小时缩到...

Docker 安全与权限控制:别让你的容器变成“漏洞盒子”

在享受容器带来的轻量与灵活的同时,我们也必须面对一个现实问题:安全隐患。容器并不是天然安全,错误配置甚至可能让攻击者“越狱”入侵主机!本篇将带你从多个层面强化Docker的安全防护,构建真正可放心...

Kubernetes生产级管理指南(2025版)

在云原生技术持续演进的2025年,Kubernetes已成为企业数字化转型的核心引擎。然而,生产环境中的集群管理仍面临基础设施配置、安全漏洞、运维复杂度攀升等挑战。本文将结合最新行业实践,从基础设施即...

云原生工程师日常使用最多的工具和100条高频命令

在云原生时代,工程师不仅要熟悉容器化、编排和服务网格,还要掌握大量工具和命令来进行日常运维与开发。本文将从工具篇和命令篇两个角度,详细介绍云原生工程师每天都会用到的核心技能。一、云原生工程师常...

用 Jenkins 实现自动化 CI/CD_jenkins api自动执行

场景设定(可替换为你的技术栈)语言:Node.js(示例简单,任何语言思路一致)制品:Docker镜像(推送到DockerHub/Harbor)运行环境:Kubernetes(staging...

5款好用开源云笔记虚拟主机部署项目推荐

在个人数据管理与协同办公场景中,开源云笔记项目凭借可自主部署、数据可控的优势,成为众多用户的首选。以下推荐5款适配虚拟主机部署、功能完善的开源项目,附核心特性与部署要点,助力快速搭建专属云笔记系统。...

取消回复欢迎 发表评论: