python调用函数获取最开始的异常_Python中调用函数异常问题的分类总结,python

下面这张图非常好的总结了python中函数各类参数的排列位置,我们总结一下,可以分成四个层级,从前往后分别是:

1.位置参数(Positional Arguments)

2.可选(含默认值)参数(Optional Arguments/Default Auguments)

3.不定长位置参数(Variable Optioncal Arguments)

4.不定长关键字参数(Varialbe Keyword Arguments)

de1168c6c8ee6959e7051950ca21a3bb.png

我们可以通过inspect模块中的signature方法来查看函数中各个参数的类型

from inspect import signature

def f(a,b=2,*c,**d):

print(f'a:{a},b:{b},c:{c},d:{d}')

for name,val in signature(f).parameters.items():

print(name,val.kind)

输出的结果如下:

a POSITIONAL_OR_KEYWORD

b POSITIONAL_OR_KEYWORD

c VAR_POSITIONAL

d VAR_KEYWORD

我们在使用python函数的时候,经常会碰到报错(Trackback blabla)的情况,我们常见的有以下六类:

-SyntaxError: positional augument follows keyword argument

-SyntaxError: non-default argument follows default argument

-SyntaxError: keyword augument repeated

-TypeError: f() missing 1 required keyword-only argument: ‘b’,

-TypeError: f() missing 1 required positional augument:‘b’

-TypeError: f() got an unexpected keyword argument ‘a’

-TypeError: f() takes 0 positional arguments but 1 was given.

我们可以做成下面的脑图来方便记忆:

1c09fbd5d9bb25a0e6fb9bd8174265b6.png

我们逐个来演示

一、missing required positional argument error

def f(a,b):

return a*b

print(f(1))

报错信息:

Traceback (most recent call last):

File "E:\python60days\funcParams\func_argument.py", line 24, in

print(f(1))

TypeError: f() missing 1 required positional argument: 'b'

二、more optional arguments are given error

def f(a):

return a*a

print(f(1,2))

报错信息:

Traceback (most recent call last):

File "E:\python60days\funcParams\func_argument.py", line 24, in

print(f(1,2))

TypeError: f() takes 1 positional argument but 2 were given

[Finished in 0.8s with exit code 1]

三、Postional Argument follows Keyword Argument

def f(a,b):

print(f'a:{a},b:{b}')

print(f(a=1,20))

报错信息:

File "E:\python60days\funcParams\func_argument.py", line 24

print(f(a=1,20))

^

SyntaxError: positional argument follows keyword argument

[Finished in 0.7s with exit code 1]

四、Repeated Arguments

def f(a,b):

print(f'a:{a},b:{b}')

print(f(a=1,a=2,b=3))

报错信息

File "E:\python60days\funcParams\func_argument.py", line 24

print(f(a=1,a=2,b=3))

^

SyntaxError: keyword argument repeated

[Finished in 0.9s with exit code 1]

五 non-default argument follows default argument

def f(a=1,b):

print(f'a:{a},b:{b}')

print(f(2,3))

报错信息:

File "E:\python60days\funcParams\func_argument.py", line 22

def f(a=1,b):

^

SyntaxError: non-default argument follows default argument

六、unexpected keyword argument ‘a’

def f(*a):

print(f'a:{a}')

f(a=1)

报错信息如下:

Traceback (most recent call last):

File "E:\python60days\funcParams\func_argument.py", line 24, in

f(a=1)

TypeError: f() got an unexpected keyword argument 'a'

七、positional arguments but was given

def f(**a):

print(a)

f(1)

报错信息:

Traceback (most recent call last):

File "E:\python60days\funcParams\func_argument.py", line 24, in

f(1)

TypeError: f() takes 0 positional arguments but 1 was given

也可以这样总结规则

一、前排的位置参数缺一不可、多一也不可能

二、关键词参数必须在位置参数右边

三、对同一个形参不能重复传值

四、非默认参数不能在默认参数之后

五、可变位置参数不能传入关键字参数

六、可变关键字参数不能传入位置参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值