Python 将无转换为异常

Python 将无转换为异常,python,Python,如果我有一个函数可以返回None(我无法更改此函数): def maybe()->可选[str]: ... 我想在表达式中使用它,例如: x=“你好”+也许()+“世界” 当然,这不是类型检查,但是如果maybe()返回None,我想让它抛出一个异常。(我希望它能在一般情况下工作并通过类型检查;我不想仅仅依靠+抛出异常。) 显然,我可以编写一个函数来实现这一点: T=TypeVar('T') 如果没有,def抛出(x:可选[T])->T: 如果x为无: 引发异常(…) 返回x 然后我可以这

如果我有一个函数可以返回
None
(我无法更改此函数):

def maybe()->可选[str]:
...
我想在表达式中使用它,例如:

x=“你好”+也许()+“世界”
当然,这不是类型检查,但是如果
maybe()
返回
None
,我想让它抛出一个异常。(我希望它能在一般情况下工作并通过类型检查;我不想仅仅依靠
+
抛出异常。)

显然,我可以编写一个函数来实现这一点:

T=TypeVar('T')
如果没有,def抛出(x:可选[T])->T:
如果x为无:
引发异常(…)
返回x
然后我可以这样做:

x=“Hello”+如果没有则抛出(可能())+“world”
但是有没有一种内置的方法可以在我不必编写该函数的情况下执行此操作


为了清楚起见,我希望必须修改
x=
行。我想避免定义
maybe()
。我很确定没有解决办法,但我想我应该检查一下,以防我遗漏了什么。

当您尝试
+
a
None
时,值是实现这一点的内置方法;这不是你想要的原因吗?如果确实需要引发特定类型的异常和/或特定的异常消息,那么定制函数似乎是指定该异常的唯一方法。如果直接的
+
唯一的问题是类型检查,那么你可以用a来表示结果是
str
。不
+
不是正确的方法,因为我甚至可能没有
+
。这只是一个例子。类型断言也是不正确的,因为类型断言旨在向类型系统提供它自己无法理解的额外正确信息。仅仅说“这不可能是
None
”就是一个谎言。好吧,如果值是
None
,那么没有内置的方法来编写一个表达式,该表达式会在值为
None
时提升,但在其他情况下会导致原始值,因此自定义函数似乎是实现所需操作的唯一明智方法。我能想到的唯一一种仅在
None
上引发的通用机制是属性访问,因此您可以编写类似
的东西,例如(…)。一些属性会引发异常,但您无法获得原始值(除非所讨论的对象必须具有引用自身的属性),而且它仍然没有进行打字检查。