1

文字列のエラーチェックを行うPythonの関数があります。関数がエラーを検出すると、エラー コードとそのエラーの識別子を含むタプルが返されます。プログラムの後半に、エラーを処理する関数があります。タプルを 2 つの変数に受け入れます。

errCode, i = check_string(s,pathType)

check_string は、タプルを生成する関数です。私がやりたいことは、エラーがない場合はゼロを返すことです。ゼロが返された場合、変数 i には何もないため、上記のコードは失敗したように見えます。

これを機能させる簡単な方法はありますか、それともエラーが見つからない場合、プログラムに 0 と 0 のタプルを返させるだけでよいのでしょうか?

4

4 に答える 4

3

これには例外システムを使用します。

class StringError(Exception):
    NO_E = 0
    HAS_Z = 1

def string_checker(string):
    if 'e' not in string:
        raise StringError('e not found in string', StringError.NO_E)
    if 'z' in string:
        raise StringError('z not allowed in string', StringError.HAS_Z)
    return string.upper()

s = 'testing'
try:
    ret = string_checker(s)
    print 'String was okay:', ret
except StringError as e:
    print 'String not okay with an error code of', e.args[1]
于 2012-07-29T10:48:38.527 に答える
1

値を取得しようとする前に、タプルの長さを単純にチェックしてみませんか?

err_tup = check_String(s, pathType)
if len(err_tup) == 2:
    errCode, i = err_tup
else: # assuming it can only be 1 otherwise
    errCode = err_tup

これは、タプルを生成する残りのコードに変更を加えることなく機能し、意味的に明確です。

「シンプルは複雑よりも優れている」に基づいています。

于 2012-07-29T10:43:39.933 に答える
1

エラーの値として None を使用できます

def check_string(s,pathType):
    # No error
    return (None, i)
于 2012-07-29T10:52:41.737 に答える
0

ゼロを返す場合:

foo = func()
if not foo:
    print 'No errors'
else:
    # foo is tuple
于 2012-07-29T11:07:10.670 に答える