2016-06-12 8 views
1

少なくとも、それは私がそれを理解できる最大のものであり、何時間も実行の流れをたどっています。ここでは、コードの関連抜粋です:返された後にPython関数が終了していないようです

def check_list(inputList): 
    '''checks if list is composed of numbers, and, if so, returns a new list of purely integers''' 
    VerifiedDataSet = [] 
    for i in inputList: 
     try: 
      VerifiedDataSet.append(int(i)) 
     except: 
      print("Value in", inputList.index(i) + 1, "position isn't a number!") 
      return "not approved" 
    return ("approved", VerifiedDataSet) 

print("This program will make your data set into a color coded bar graph (eventually)!") 

listStatus = "not approved" 

while listStatus == "not approved": 
    dataSet = ["1", "2", "foo"] #for illustration of behavior 
    result = check_list(dataSet) 
    listStatus = result[0] 
    if listStatus == 'approved': 
     dataSet = result[1] 
    else: 
     pass 

print("You should not see this.") 

アイデアは、入力されたリストを機能check_list反復を持っており、整数に各要素を変換しようとすることでした。例外があった場合、整数に変換できなかった値の位置を出力し、リストが承認されなかったことを返します。これは、1)関数を終了し、2)以下のループを続けるようにします。 。

イテレータが完了し、関数が "承認済み"の文字列(whileループを終了する)と新しい整数リストの両方を返す場合にのみ例外が発生します。しかし、私が集めることから、listStatusは何とか「承認済み」に設定されています。最後にprintが実行される必要はありません。

この現象の原因は何ですか?

+0

失敗した変換の 'ValueError'が単に 'check_list()'からトリクルダウンするのを避けるために、なぜこのような長さになるのでしょうか? – dhke

+0

@dhke私は、あなたがやろうとしていることをはるかに効率的な方法があることを示唆していると仮定しています(そして私はそれを疑いません)。その理由は、私はまだPythonやプログラミング全般について非常に新しいことです。私は例外を除いて少し試合しましたが、私は彼らと何をするべきか、それを私の利益に使う方法はまだ分かっていないと思います。まもなく! :) – bream

答えて

0

関数から返される値は文字列です。したがって、結果には「承認されていません」という値があります。

listStatus = result[0]

これは= 'n' のではなく、 "承認していない" listStatusを行います。

+3

私の答えが投票されている理由を教えてください。 – SilentMonk

2

例外は、関数から'not approved'listStatus == 'n'を作る

、したがって、whileループブレークを返している発生した場合。

+0

'listStatus'は当初、あなたの答えでは「not」に設定されていました。したがってdownvote。あなたが@TheLazyScripterのように私を倒すからではありません。 – SilentMonk

+2

あなたのダウン投票@SilentMonkを削除しますか? – TheLazyScripter

+0

@ TheLazyScripter、確かに。あなたのコメントを削除するには? – SilentMonk

関連する問題