gpt4 book ai didi

python 基础知识,为什么异常处理不起作用?

转载 作者:太空狗 更新时间:2023-10-30 01:11:40 25 4
gpt4 key购买 nike

我是 python 开发的新手,正在尝试了解异常处理。我有 2 个函数,第一个是在列表中查找 1 次重复值,第二个是调用函数。但是如果尝试传递不存在的列表名称,它应该从 except block 打印消息,但它不起作用,请帮助

def first_duplicate(a):
x = 0
for i, j in enumerate(a):
for k in a[i + 1:]:
if j == k:
x = 1
return j
if x == 1:
break


def call_main (list_name):
try:
x = first_duplicate(list_name)
if x is None:
print("No duplicates")
else:
print(x, "is the first duplicate")
except NameError:
print("exception occurred Name ")
except ValueError:
print("exception occurred value")

我的命令是这样的

call_main(y)

我没有创建列表 : y ,在这种情况下它应该打印异常消息但它不是,请帮助

最佳答案

这是一个例子。在下面的代码中,try 中有一个不是输入的名称 y,因此它会引发 NameError 异常。

t=[11]; function(t); 将引发 NameError

t=(1,2); function(t) 将引发 AttributeError.. 因为 x.append(5) 首先被捕获。

def function(x):
try :
x.append(5);
x+y
except NameError:
print("name error exception")
except AttributeError:
print("attribute error excetption")

t=[11];
function(t)

t=(1,2)
function(t)

现在,如果您调用 function(a_list) ,而 a_list 尚未定义,那么它将引发默认的 NameError因为错误甚至在函数内部的代码被处理之前就发生了。 所以 try 甚至没有被处理。我认为这应该可以解释为什么您会得到默认的 NameError


如果您希望它产生您的NameError,您还可以(另外)将try 设置在函数范围之外

try :
call_main(y);
except NameError:
print("something");

关于python 基础知识,为什么异常处理不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48830033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com