以成功的运行结果退出Python程序(从函数中)

以成功的运行结果退出Python程序(从函数中),python,selenium-webdriver,webdriver,return,exit,Python,Selenium Webdriver,Webdriver,Return,Exit,我正在尝试退出一个Python测试用例,我正在运行该测试用例,并获得了成功的运行结果。我有一个程序,它使用我创建的函数来查看表是否包含标识符 def test_LogsIdentifiersApache(driver, url): loginToWebsite(driver, url).confirmLoginAndUnlocked() driver.get(url('/LogsPage/')) selectIdentifier(driver, "

我正在尝试退出一个Python测试用例,我正在运行该测试用例,并获得了成功的运行结果。我有一个程序,它使用我创建的函数来查看表是否包含标识符

def test_LogsIdentifiersApache(driver, url):
        loginToWebsite(driver, url).confirmLoginAndUnlocked()
        driver.get(url('/LogsPage/'))
        selectIdentifier(driver, "gdm-simple-greeter")
在该函数中[位于不同的文件中],它在表中搜索标识符。如果它找到了它,那么它将执行一些其他检查并返回运行测试用例。如果在表中找不到标识符,则会向屏幕发送一条消息,通知测试人员该标识符不在表中,并在成功运行后退出

def selectIdentifier(driver, identifier):
    << Code to search for identifier here >>

    # If identifier not found, print message to window & exit test case with successful run
    if isIdentifierPresent == False:
        print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE"
        return
def selectIdentifier(驱动程序,标识符):
>
#如果找不到标识符,则将消息打印到窗口并在成功运行后退出测试用例
如果isIdentifierPresent==False:
打印“\n注释:标识符对象\”+标识符+“\”未列在表中
返回

当我拥有测试用例中的所有代码时,使用“return”效果很好。一旦我开始创建函数,测试就停止退出并成功运行。我知道“return”使它返回到测试用例并继续运行,这是我不想要的。相反,我想。。(1) 打印未找到标识符的消息,然后。。(2) 退出此函数[和正在运行的测试用例],并成功运行并继续运行测试套件。我该怎么做?此外,此测试用例直接从带有“py.test”命令的文件夹运行,而不是从测试套件文件运行,如果这很重要的话。

如果您使用的是Python 3,则可以使用sys.exit()退出。也许是这样的

if isIdentifierPresent == False:
    print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE"
else:
    print("Hooray!")
    sys.exit()

我认为最好的方法是定义一个Exceptions类:

class noIdentifier(Exception):
    pass
现在修改代码,使其看起来像这样:

if isIdentifierPresent == False:
    print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE"
    raise noIdentifier("<Optional message>")
我相信还有其他方法可以做到这一点。然而,我发现这真的很方便

编辑:要使用可选消息

try:
    testCase()
except noIdentifier as e:
    print e.message # or use print str(e)

谢谢你的回复,@Kernel\u Panic。这里有几个问题:(1)我需要它来打印消息&如果找不到与上面所示类似的标识符,则退出函数[和位于不同文件中的测试用例]。(2) sys.exit()会导致测试用例失败,这是我不想看到的。如果不是isIdentifierPresent,我会使用
而不是
如果isIdentifierPresent==False:
场景已经更新,@alecxeYes,引发异常是一次性“多次返回”的好方法。好的,还有一个问题。当我尝试这个方法,并把一个可选的消息与。。。升起标识(“”。。。消息没有打印出来。你知道为什么吗@rwbyrd编辑了我的答案以使用此消息。@Pallav Agarwal感谢您的编辑。这一变化进展顺利。
try:
    testCase()
except noIdentifier as e:
    print e.message # or use print str(e)