python - 在 Python 中检查多种类型以引发异常
问题描述
我正在手动尝试异常以完全理解它们,并且我创建了如下代码:
def misterio(a,b):
if type(a) or type(b) != ("int") and ("float"):
raise TypeError ("Arguments should be numbers" .format(a,b))
else:
if (b<0):
raise ValueError ("B cant be 0")
elif (b==1):
return a
else:
return a+misterio(a,b-1)
print(misterio(3,2))
print(misterio(3,"a"))
print(misterio(3,1))
但它没有通过第一个if
。我要做的就是检查我的参数是否是数字,(我知道b
应该至少大于 1,但我正在一步一步地做)。有没有办法以最蟒蛇的方式做到这一点?因为我还不明白为什么它没有通过第一个if
,即使两者都是int
。
解决方案
你要
def misterio(a, b):
if not all(isinstance(x, (int, float)) for x in [a, b]):
raise TypeError("Arguments should be numbers.")
else:
if (b < 0):
raise ValueError("B cant be 0")
elif (b == 1):
return a
else:
return a + misterio(a, b - 1)
print(misterio(3, 2))
print(misterio(3, "a"))
print(misterio(3, 1))
首先,使用isinstance(...)
代替type(...)
和第二:
if type(a) or ...
总是返回真,即使a
是None
:
a = None
if type(a) or None:
print("Yes")
与您的实际错误无关,但您没有使用a
或b
在错误消息中,因此我将其省略了。
推荐阅读
- python - Python迭代器协议__iter__在迭代器返回值?
- javascript - 循环依赖何时会成为问题?
- java - 表达式中的 Freemarker 表达式
- python - 如何在 pandas 单元格计算中正确使用 apply 和 lambda
- ios - UICollectionView 中的画外音 - 缺少一些翻译
- flutter - 计算Flutter中先前位置和当前位置之间的距离
- swiftui - 在 SwiftUI 开始渲染 ContentView 之前,我们如何从 Views 中独立运行一些逻辑?
- php - 是否可以在 rabbitmq 消费者中收听代码库更改?
- android - 我应该如何在没有 Android 应用验证的情况下设置 OAuth 同意屏幕?
- python-3.x - HTML 模板确实存在(base.html),Pycharm 解释器无法从我的应用名称 = 'app' 导入视图