广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 错误处理
  • 336
分享到

Python 错误处理

错误Python 2023-01-31 02:01:22 336人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

1.1   错误处理1.1.1   try>>> try:...    print('try...')...    r = 10 / 0...    print('result:', r)... except ZeroDi

1.1   错误处理

1.1.1   try

>>> try:

...    print('try...')

...    r = 10 / 0

...    print('result:', r)

... except ZeroDivisionError as e:

...    print('except:', e)

... finally:

...    print('finally...')

...    print('END')

...

try...

except: division by zero

finally...

END

当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

finally语句块无论是否执行except,都会被执行的。

 

同时定义多个except

>>> try:

...    print('try...')

...    r = 10 / int('a')

...    print('result:', r)

... except ValueError as e:    --异常1

...    print('ValueError:', e)

... except ZeroDivisionError as e:   --异常2

...    print('except:', e)

... else:   --无异常时执行else

...    print('no error')

... finally:

...    print('finally...')

...    print('END')

...

try...

ValueError: invalid literal for int() witHBase 10: 'a'

finally...

END

 

跨越多层调用

使用try...except捕获错误还有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用foo(),foo()调用bar(),结果bar()出错了,这时,只要main()捕获到了,就可以处理。

>>> def foo(s):

...    return 10 / int(s)

...

>>> def bar(s):

...    return foo(s) *2

...

>>> def main():

...    try:

...        bar('0')

...    except Exception as e:

...        print('Error:', e)

...    finally:

...        print('finally...')

...

>>> main()

Error: division by zero

finally...

只要在合适的层次去捕获错误就可以了。

1.1.2   调用堆栈

[root@daidai python]# cat err.py

#!/bin/bash/Python

# -*- coding:utf-8 -*-

 

def foo(s):

   return 10 / int(s)

 

def bar(s):

   return foo(s) * 2

 

def main():

   bar('0')

 

main()

 

[root@daidai python]# python err.py

Traceback (most recent call last):

 File "err.py", line 13, in <module>

   main()

 File "err.py", line 11, in main

   bar('0')

 File "err.py", line 8, in bar

   return foo(s) * 2

 File "err.py", line 5, in foo

   return 10 / int(s)

ZeroDivisionError: division by zero    --最后便是错误的根源

1.1.3   记录错误

捕捉错误,把错误堆栈记录,让程序继续运行。

Python内置的logging模块可以非常容易地记录错误信息。

[root@daidai python]# cat err_logging.py

#!/usr/bin/python

# -*- coding:utf-8 -*-

 

import logging

 

def foo(s):

   return 10 / int(s)

 

def bar(s):

   return foo(s) * 2

 

def main():

   try:

       bar('0')

   except Exception as e:

       logging.exception(e)

 

main()

print('END')

[root@daidai python]# python err_logging.py

ERROR:root:division by zero

Traceback (most recent call last):

 File "err_logging.py", line 14, in main

    bar('0')

 File "err_logging.py", line 10, in bar

   return foo(s) * 2

 File "err_logging.py", line 7, in foo

   return 10 / int(s)

ZeroDivisionError: division by zero

END

1.1.4   抛出错误

尽量使用python内置的错误类型。

错误是class,捕获一个错误就是捕获到该class的一个实例。

定义一个错误class,选择好继承关系。

>>> class FooError(ValueError):

...    pass

...

>>> def foo(s):

...    n = int(s)

...    if n == 0:

...         raise FooError('invalid value: %s' % s)

...    return 10 / n

...

>>> foo('0')

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

 File "<stdin>", line 4, in foo

__main__.FooError: invalid value: 0     --自己定义的错误

 

另一种错误处理方式——错误上抛

>>> def foo(s):

...    n = int(s)

...    if n == 0:

...         raise ValueError('invalid value: %s' %s)    --python内置错误

...    return 10 /n

...

>>> def bar():

...    try:

...        foo('0')

...    except ValueError as e:

...        print('ValueError')

...        raise    --raise语句如果不带参数,就会把当前错误原样抛出。

...

>>> bar()

ValueError

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

 File "<stdin>", line 3, in bar

 File "<stdin>", line 4, in foo

ValueError: invalid value: 0

其实这种错误处理方式不但没病,而且相当常见。捕获错误目的只是记录一下,便于后续追踪。但是,由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理。好比一个员工处理不了一个问题时,就把问题抛给他的老板,如果他的老板也处理不了,就一直往上抛,最终会抛给CEO去处理。

 

在except中raise一个Error,还可以把一种类型的错误转化成另一种类型

>>> try:

...    10 / 0

... except ZeroDivisionError:

...    raise ValueError('input error')

...

Traceback (most recent call last):

 File "<stdin>", line 2, in <module>

ZeroDivisionError: division by zero

 

During handling of the above exception,another exception occurred:

 

Traceback (most recent call last):

 File "<stdin>", line 4, in <module>

ValueError: input error


--结束END--

本文标题: Python 错误处理

本文链接: https://www.lsjlt.com/news/185662.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 错误处理
    1.1   错误处理1.1.1   try>>> try:...    print('try...')...    r = 10 / 0...    print('result:', r)... except ZeroDi...
    99+
    2023-01-31
    错误 Python
  • Python 6.1 错误处理
    错误处理在程序运行过程中,如 果发生了错误,可以事先约定返回一个错误代码,这样,就知道是否有错以及出错原因。在操作系统提供的调用中,返回错误代码非常常见。比如打开文件的open()函数,成功时返回文件描述符(就是一个整数),出错时返回-1....
    99+
    2023-01-31
    错误 Python
  • python中的错误处理
    用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错: def foo(): r = some_function() if r...
    99+
    2022-06-04
    错误 python
  • python 错误处理:try..exc
    python错误继承表:https://docs.python.org/3/library/exceptions.html#exception-hierarchy格式:def 函数():      try:               内容...
    99+
    2023-01-31
    错误 python exc
  • Python错误与异常处理
    1. 从键盘输入一个整数,求 100 除以它的商,并显示输出。要求对从键盘输入的数值进行异常处理。 try:     n=int(input("请输入一个整数:"))     x=1...
    99+
    2022-11-13
  • MySQL错误处理--1146错误
    在MySQL的主从复制过程中,出现了1146错误。提示的错误原因是:在默认的数据中找不到指定的表。show slave status\G;现实的同步状态。Slave_IO_Running: YESSlave...
    99+
    2022-10-18
  • python搭建网站错误怎么处理
    当Python搭建网站出现错误时,可以采取以下步骤进行处理:1. 检查错误提示:查看Python的错误提示信息,通常会显示错误的具体...
    99+
    2023-09-22
    python
  • python基础之错误和异常处理
    import Exception # except 在捕获错误异常的时候 是要根据具体的错误类型来捕获的 # 用一个块 可以捕获多个不同类型的异常 # EXception ...
    99+
    2022-11-12
  • python错误处理的方法有哪些
    在Python中,常用的错误处理方法有以下几种: try-except语句:用于捕获和处理异常。代码放在try代码块中执行,如果...
    99+
    2023-10-26
    python
  • python爬虫中怎么处理429错误
    这篇文章将为大家详细讲解有关python爬虫中怎么处理429错误,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pytho...
    99+
    2023-06-14
  • FastAPI--错误处理(5)
    HTTPException异常抛出再之前Bottle 中其实有一个就是HttpError异常类,在FastAPI也存在这么一个HTTPException。比如:import uvicorn from fastapi&nb...
    99+
    2023-01-31
    错误 FastAPI
  • Python异常与错误处理详细讲解
    基础知识 优先使用异常捕获 LBYL(look before you leap): 在执行一个可能出错的操作时,先做一些关键的条件判断,仅当满足条件时才进行操作。 EAFP(eais...
    99+
    2022-12-22
    Python异常 Python错误处理
  • Python中错误处理的原则有哪些
    这篇文章给大家介绍Python中错误处理的原则有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。错误绝不应该悄悄传递...Errors should never pass silently&hellip;当 ...
    99+
    2023-06-15
  • ORACLE 异常错误处理
    即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。任何ORACLE错误(报告为ORA-xxxxx形式的Oracle错误号)、P...
    99+
    2022-10-18
  • ORACLE ORA-03137错误处理
    问题背景:        今天公司的OA系统运行的时候,用户反馈有时候登陆到OA平台会显示登陆不了。OA管理员检查发现应用没有问题,但是连接到数据库的时候有时候会...
    99+
    2022-10-18
  • cdn错误如何处理
    dn出现502错误的解决方法CDN加速出现502错误,一般是SSL证书错误,可以在网站面板中删除SSL证书后重新添加。或修改本地HOST到服务器ip地址测试。如果检查配置全部都正确的话,就是服务器营运商拦截了。所以网站在工信部备案后,还需要...
    99+
    2022-10-07
  • ASP.NETCore处理错误环境
    1.前言 ASP.NET Core处理错误环境区分为两种:开发环境和非开发环境。 开发环境:开发人员异常页。非开发环境:异常处理程序页、状态代码页。 在Startup.Configu...
    99+
    2022-11-13
  • 【故障处理】ORA-12162 错误的处理
    【故障处理】ORA-12162: TNS:net service name is incorrectly specified   一.1  场景 今天拿到一个新的环境,可是执行sq...
    99+
    2022-10-18
  • Python编程pydantic触发及访问错误处理
    目录常见触发错误的情况错误的触发注意访问错误的方式简单栗子复杂栗子自定义错误自定义错误模板类PydanticValueError常见触发错误的情况 如果传入的字段多了会自动...
    99+
    2022-11-12
  • python中with遇到错误语句如何处理
    本篇文章给大家分享的是有关python中with遇到错误语句如何处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。说明将错误的类型、值和回溯传递给_exit__方法。允许__e...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作