类型不正确时引发 TypeError
Posted
技术标签:
【中文标题】类型不正确时引发 TypeError【英文标题】:Raising TypeError when type is not correct 【发布时间】:2022-01-18 20:08:56 【问题描述】:我想调用函数foo(a, b, c)
,其中参数可以是int
或float
这些参数用户输入使用space
作为分隔符。
例如:1 8 9
同时,用户不仅可以输入数字,还可以输入一些错字,例如:
1 8k 9
。
在这种情况下,我应该提出 TypeError 并输入错误元素的数量
a, b, c = map(int, input().split())
for i, key in enumerate([a, b, c]):
if not isinstance(key, (int, float)):
raise TypeError(
f'The type of i + 1 element is incorrect')
foo(float(a), float(b), float(c))
在我的代码中出现下一个错误:我无法将k8
写入int
变量。
1 k8 5
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\digits\main.py", line 40, in <module>
a, b, c = map(int, input().split())
ValueError: invalid literal for int() with base 10: 'k8'
当用户输入k8
时如何引发 TypeError?
如果用户输入k8 9 5h
,情况如何?在这种情况下,我需要使用消息 The type of 1, 3 element is incorrect
引发 TypeError
【问题讨论】:
那么你必须在这行之前检查输入是否可以转换为float或int:a, b, c = map(int, input().split())
如果允许浮动,为什么要使用map(int, ...)
?
【参考方案1】:
应该这样做:
args = input().split()
f_args = []
errors = []
for i, arg in enumerate(args, 1):
try:
f_args.append(float(arg))
except ValueError:
errors.append(str(i))
if errors:
raise TypeError(f"The type of ', '.join(errors) element is incorrect")
foo(*f_args)
【讨论】:
谢谢!如果三个输入中有两个不正确,例如5 9k 6j
,我该如何输入错误消息The type of 2, 3 element is incorrect
?
那么您需要将i
值累积到一个列表中,而不是立即提高TypeError
,以便在最后引发错误。让我解决这个问题。
谢谢你,@Samwise 它对我来说很好用!需要时间来理解它,但我会的:)
嗨,@Samwise!也许你可以帮助我:我需要使用任何参数调用foo
,即用户输入。但是如果参数包含像8k
这样的符号,我需要在我的foo
函数中提高TypeError
,而不是在它之前
只要把上面的逻辑放到你的foo
函数里面。以上是关于类型不正确时引发 TypeError的主要内容,如果未能解决你的问题,请参考以下文章
Emgu.CV.CvInvoke”的类型初始值设定项引发异常
由客户端不视为相同类型的 Web 服务引发的自定义异常(使用共享程序集)