-1

これは、常に失敗している作業に対する私のプロジェクトの機能です (完全に共有することはできません)。Raspberry Pi を使用して、データ収集とモーター制御のための多目的システムに取り組んでいます。デバッグと、ユーザーが何らかの形で誤ったデータを提供した場合の両方のために、大きな try:/except: システムをセットアップしました。

0b0この関数は、提供されたデータ、設定、および0b1供給されたテキスト '0' または '1' ごとに正常に繰り返されます。ただし、「真の」バイナリへの変換に成功すると、それらを変換するために 8 つのグループを反復処理するときに失敗します (これは、何らかの理由で、他の試行でTypeErrorint(x, base)がスローされたためです)。スローされるエラーは、次のいずれでもありません。

  1. TypeError
  2. 算術エラー
  3. RuntimeError (どちらにフォールバックする必要がありますか?)
  4. 環境エラー
  5. UnboundLocalError
  6. ルックアップ エラー
  7. ValueError
  8. インデックスエラー

and サブコードを実行するfor i in range(0, floor(length / 8), 1):とエラーがスローされますが、説明されていません。失敗するだけです。この特異な関数を数日間デバッグしてきましたが、これが最後の問題のようですが、正直なところ、なぜ失敗するのかわかりません。関数convertStates(data)は以下のとおりです。

def convertStates(data):
    # Converts binary states (0/1) in any format (due to built-in functions not working) to text.
    n = 0
    dmn = str(data)
    dat = '0b0'
    datFirst = True
    try:
        for i in dmn:
            toapp = '0b0' if (i == 0) else '0b1'
            if (datFirst):
                dat = toapp
                datFirst = False
            else:
                dat.join(toapp)
    except:
        print("Error: Failed to append binary values to list.")
        exit()
    try:
        length = len(dat)
    except:
        print("Error acquiring length of binary data")
        exit()
    try:
        for i in (range(0, floor(length / 8), 1)):   <<<< SOMETHING HERE
            try:
                temp = int(dat[i*8:i*8+8],2) # this is perfectly fine
            except:
                print("Error with byte storage")
            try:
                a = temp.decode("utf-8")
                print(str(a))
            except:
                print("Error with decoder")
            try:
                n += chr(a)
            except:
                print("Error with character converter")
    except ValueError:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary->string due to value mismatch.")
        exit()
    except TypeError:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary->string due to value type mismatch.")
        exit()
    except UnboundLocalError:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary->string due to unbound variable(s).")
        exit()
    except IndexError:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary->string due to an index call for nonexistent value.")
        exit()
    except ArithmeticError:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary->string due to math error.")
        exit()
    except LookupError:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary->string due to lookup error.")
        exit()
    except:
        print("Exception occurred in 'convertStates(data)' function!")
        print("Error: Could not convert binary bytewise to string.")
        exit()
    return n

前に述べたように、try:/except: システムは、自分の側でエラーを特定し、エンド ユーザーの問題解決の基礎を築くために導入されました。

私はこれを取り巻く10以上の異なる投稿を見てきましたが、役に立ちませんでした. これでエラーが見つかりません。何もint(x, base)変換できなかったため、この方法で設定する必要がありました。この投稿を参照してください ( Python で文字列をバイナリに変換する)。これは、使用しようとしたソリューションの 1 つです。

呼び出しに関してはexit()、この関数はループの一部で呼び出されるため、20 個の例外が積み重なって無限ループにならないようにするためです。

私は何を間違っていますか、どうすれば修正できますか? それは私が気付くべきだったばかげた小さなことでしたか (Python は私のトップ言語ではありません)、それともまったく別の何かでしたか? どんな助けでも大歓迎です。これは私を少し気が狂わせているだけです-私が見たものは何も解決できず、これを作成する原因となった問題も解決できません.

編集: 人々はコールバックを裸の なしで置くと言いましたがexcept:、前に言ったように、それは何も与えません。失敗するだけです。エラーコードもトレースバックも何もありません。正直に言うと、except:from テスト コードと from ループを削除しました。実行を継続する必要がある場合は、終了するだけです。

4

1 に答える 1