首页
学习
活动
专区
圈层
工具
发布

验证码
EN

Stack Overflow用户
提问于 2012-07-31 06:51:53
回答 2查看 494关注 0票数 0

我正在尝试验证字符串的有效性,以确保它是我可以传递给终端的合法命令。如果字符串通过了测试,我将返回True。否则,我将返回False和一条错误消息。

我的代码非常丑陋,有很多嵌套的if语句--我如何改进它呢?

代码语言:javascript
复制
task = task.split()
if len(task) > 1: 
    if task[0] == 'svn':
        if task[1] in ALLOWED:
            if len(task[2:]) == ALLOWED[task[1]]:
                return True, task, None
            else:
                return False, "Incorrect number of arguments."
        else:
            return False, "Not a legal command."    
    else:
        return False, "Not a subversion command."
else:
    return False, "Invalid input"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-31 06:57:17

代替肯定检查和嵌套的if语句:

代码语言:javascript
复制
if a:
    if b:
        if c:
            foo()
        else:
            # error 3
     else:
         # error 2
else:
    # error 1

你可以反其道而行之,除非一切正常:

代码语言:javascript
复制
if not a:
    # raise an exception

if not b:
    # raise an exception

if not c:
    # raise an exception

# If we get here, everything is OK.
foo()

这样可以更容易地查看哪条错误消息与哪条条件匹配。

票数 5
EN

Stack Overflow用户

发布于 2012-07-31 07:00:30

以下是Mark Byer的答案如何具体针对您的案例的一个示例:

代码语言:javascript
复制
task = task.split()
if len(task) < 2:
    return False, "Invalid input"
if task[0] != 'svn':
    return False, "Not a subversion command."
if task[1] not in ALLOWED:
    return False, "Not a legal command."    
if len(task[2:]) != ALLOWED[task[1]]:
    return False, "Incorrect number of arguments."  
return True, task, None
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11730849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档