0

文字列の有効性を検証して、端末に渡すことができる正当なコマンドであることを確認しようとしています。文字列がテストに合格した場合、True を返します。それ以外の場合は、False とエラー メッセージを返します。

私のコードはネストされた多数の if ステートメントでかなり醜いです - どうすれば改善できますか?

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"
4

2 に答える 2

5

肯定的なチェックとネストされた if ステートメントの代わりに:

if a:
    if b:
        if c:
            foo()
        else:
            # error 3
     else:
         # error 2
else:
    # error 1

すべてがOKでない限り、ロジックを逆にして救済することができます:

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()

これにより、どのエラー メッセージがどの条件に一致するかを簡単に確認できます。

于 2012-07-30T22:57:16.573 に答える
2

以下は、Mark Byer の回答を具体的にどのように実装できるかの例です。

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
于 2012-07-30T23:00:30.253 に答える