try/except异常处理_

try:

    f=open('E:\\test.txt')
#f = open('E:\\360Downloads\\test.txt')
except IOError:#异常类型名,不是随便写的
    print('没找到文件')
else:
print('打开文件成功')

    f.close()
参考:
# 日志模块
import logging
import traceback

# 引入日志
logging.basicConfig(filename='log_record.txt',
    level=logging.DEBUG, filemode='w', format='[%(asctime)s] [%(levelname)s] >>>  %(message)s',
                    datefmt='%Y-%m-%d %I:%M:%S')

try:
	print(a+1)   # 放主要代码
except Exception as e:
    logging.error("Main program error:")
    logging.error(e)
    logging.error(traceback.format_exc())

python常见错误(exception)
在Python中,有许多常见的错误类型,其中一些包括:

SyntaxError:语法错误,通常是由于代码中的拼写错误、缺少括号或其他语法问题引起的。这些错误会在代码解析时立即触发。

IndentationError:缩进错误,通常是由于不一致的缩进引起的。在Python中,缩进非常重要,因为它表示代码块的范围。

NameError:名称错误,通常是由于引用了未定义的变量或函数引起的。这可能是由于拼写错误或作用域问题导致的。

TypeError:类型错误,通常是由于将不兼容的数据类型进行操作引起的。例如,尝试将整数与字符串相加会导致类型错误。

ValueError:值错误,通常是由于传递给函数的参数值不合法引起的。例如,尝试将无效的字符串转换为整数会引发值错误。

IndexError:索引错误,通常是由于尝试访问列表、元组或其他序列类型中不存在的索引引起的。例如,访问超出列表范围的索引会引发索引错误。

KeyError:键错误,通常是由于尝试在字典中查找不存在的键引起的。如果键不存在于字典中,将引发键错误。

FileNotFoundError:文件未找到错误,通常是由于尝试打开或操作不存在的文件引起的。这可能是由于文件路径错误或文件不存在的原因引起的。

ZeroDivisionError:除以零错误,通常是由于尝试在除法操作中将分母设置为零引起的。

AttributeError:属性错误,通常是由于尝试访问对象上不存在的属性或方法引起的。

ImportError:导入错误,通常是由于尝试导入不存在的模块或名称引起的。

RuntimeError:运行时错误,通常是由于逻辑错误或其他未知原因引起的。这通常需要更深入的调试。

这些是Python中一些常见的错误类型,但并不限于这些。当你在编写代码时,要小心捕获和处理这些错误,以提高程序的稳定性和可靠性。使用 try 和 except 块来捕获和处理异常是一种有效的方式

当然也可以直接使用:

while(True):
    try:
        m,n = map(int,input().split())
        代码块
    except: # 不指明任何错误,就是会捕获任何错误
        break

但是不推荐使用全部捕获,因为会导致捕获其他错误,如当出现下标越界错误,也会被捕获,中止代码,但却不会报错,找错误是件很痛苦的事情,特别当代码多的时候。


原文链接:https://blog.csdn.net/m0_73765519/article/details/132710827

下面有个小列子:输入非数字 就报错,可以用异常处理解决

报错解决:
把 n = int(input('输入:1石头,2剪刀,3布: ')) 拆开写,
然后加上 try except,异常部分走except,重新输入即可

import random
while True:
    computer = random.randint(1,3)#生成1到3随机整数
    user = input('输入:1石头,2剪刀,3布: ')
    try:
        #n = int(input('输入:1石头,2剪刀,3布: '))
        n = int(user)
        if n == computer :
            print(f' 平局,对方{computer}')
        elif (n == 1 and computer == 2) or (n == 2 and computer == 3) or (n == 3 and computer == 1):#or和()之间要有空格,不然不执行代码
            print(f'你赢了!!,对方{computer}')
        elif n >=4:
            print(f'请出123石头剪刀布!!,对方{computer}')
        elif user =='' :
           
           print('请出拳!')
        elif n == 0:
            print('游戏结束!!')
            break  
        
        else:
            print(f'你输了!!,对方{computer}')
    except ValueError:
        print('请重新输入123或输入0退出:')

一个try 可以有多个except:但是每次打印结果只显示其中一个except下的报错

try:

    dic = {'a':1}

    lis = [0,3]

    print(lis[3])#出错!列表索引异常 list index out of range

    print(1)

    print(dic['python66'])

except NameError as e:

    print('出错!打印未定义变量',e)

except ZeroDivisionError as e:

    print('出错!除以0',e)

except IndexError as e:

    print('出错!列表索引异常',e)
except KeyError as e:

    print('出错!字典取值异常',e)

except:

    print('未知异常')

异常类型:

参考Python学习 -- 异常分类 - 知乎

Python中还有一个抛异常raise
#"raise" 是一个 Python 中用于抛出异常的关键字这允许程序员在发生错误或不符合预期条件的情况下,
# 提前终止程序的执行并给出相应的错误信息。
def ren(name: str, age: int):
    if len(name) > 3:
        raise ValueError("Name length should not exceed 20 characters")#"raise" 是一个 Python 中用于抛出异常的关键字
    print(name, age)
ren('给新事1',20)

File "d:\pythonXangmu\pythonproject01\test1.py", line 18, in <module>
    ren('张新事1',20)
  File "d:\pythonXangmu\pythonproject01\test1.py", line 16, in ren
    raise ValueError("Name length should not exceed 20 characters")
ValueError: Name length should not exceed 20 characters

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值