Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        在4个月前关闭。
                                                                                            
                
        
我有很多断言语句,可用于验证输入数据和程序状态。即:

assert all((i.children is not None for i in items)), "Someone has no children."


我想使用相同的语法,但使用特定的异常,即:

if any((i.children is None for i in items)):
  raise NoChildrenException("Someone has no children.")



有没有一种单行语法可以实现相同的目的?
我试过了 :

if any((i.children is None for i in items)): raise NoChildrenException("Someone has no children.")


但这不是PEP8有效的。

要么

def raise_if(condition, clazz, *args):
  if condition:
    raise(clazz(*args))


raise_if(any((i.children is None for i in items)), NoChildrenException, "Someone has no children.")



但这有点丑陋。

更新:

谢谢@Thomas。我修复了问题描述中的示例。
我认为最接近我想要实现的目标是这一点(基于@puchal的回答)。

def raise_exc(exc):
    raise exc

all((i.children is not None for i in items) or raise_exc(NoChildrenException("Someone has no children."))



我没有考虑过以这种方式使用or

最佳答案

当前,没有办法做到这一点,这也是有效的PEP8。

没有比这更多的pythonic了:

if any(i.children is None for i in items):
    raise NoChildrenException("Someone has no children.")


注意,您的问题描述中有一个错误-您必须在第二个代码示例中取消该条件。您可以通过使用如上所示的not摆脱两个any()

关于python - 如果条件在单行中为真,则引发异常? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57576447/

10-12 21:43