异常中的异常,难道函数参数传递异常不能识别?

为什么还是报错?
不是应该输出 error 吗?


def f(x,y=2,z=3):
    pass

try:
    f(x=1,2)
except:
    print('error')

因为你现在时语法错误,也就是说解释器不知道你写了什么,无法执行,所以不会捕捉错误抛出错误,而是直接报错

img


语法错误,要这样写才正确,你的入参不能写类型

img

测试了各种正确的调用方法,以及错误的
报SyntaxError:错的,程序不继续运行下去,所以try语句无效
报TypeError, ZeroDivisionError等错误的,try语句才有效

>>> f(x=1,y=2,z=3)
>>> f(1,y=2,z=3)
>>> f(1,2,z=3)
>>> f(1,2,3)
>>> f(x=1,2,3)
SyntaxError: positional argument follows keyword argument
>>> f(1,y=2,3)
SyntaxError: positional argument follows keyword argument
>>> f(x=1,y=2,3)
SyntaxError: positional argument follows keyword argument
>>> f(1,b=2)
Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    f(1,b=2)
TypeError: f() got an unexpected keyword argument 'b'
>>> f(1/0)
Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    f(1/0)
ZeroDivisionError: division by zero
>>> try:
    f(x=1,b=2)
except:
    print('error')

    
error
>>> try:
    f(x=1/0)
except:
    print('error')

    
error

位置参数放前面,关键字参数放后面,所以你写的(x=1,2)本身就有问题!过不了编译环节。