11

私はPythonにかなり慣れていないので、これを正しく行っていることを確認したいと思います。例外クラスが必要です:

class UnknownCommandReceived(Exception):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return repr(self.value)

一致する正規表現がない場合、この関数の最後で例外を発生させます。

def cmdType(self):
    match = re.match(r'(<[ \w]+>),\s*(\d+)?,?\s*(\d+)?', cmd, re.IGNORECASE)
    if match: 
        cmd_type = 'int_tool'
        return cmd_type, match

    match = re.match(r'LCD\(([^\)]*)\)?_?(RED|YELLOW|GREEN|TEAL|BLUE|VIOLET|OFF|ON|SELECT|LEFT|DOWN|RIGHT)?', cmd, re.IGNORECASE)
    if match: 
        cmd_type = 'lcd'
        return cmd_type, match

    match = re.match(r'buffer(_read|_num|_line)(\((\w)\))?', cmd, re.IGNORECASE)
    if match: 
        cmd_type = 'buffer'
        return cmd_type, match

    # ... More regex matches ... 

    raise UnknownCommandReceived( "cmdType received an unknown command" )

    # unecessary return?
    return 'None', None

私の質問は、例外が常に発生する場合、関数の最後に return ステートメントは必要ないのでしょうか? 申し訳ありません..非常に基本的な質問です。私の理解では、例外が発生すると、実行はコードのその時点に戻ることはありません(ループまたは再度呼び出される関数でない限り)。それはキャッチに直行し、そこから続けますか?

4

1 に答える 1

16

いいえ、ありません。ステートメントにreturn到達できません。

また、 などの静的分析ツールは、pyflakesそれをエラーとして報告します。

于 2013-05-18T08:33:57.600 に答える