これは、常に失敗している作業に対する私のプロジェクトの機能です (完全に共有することはできません)。Raspberry Pi を使用して、データ収集とモーター制御のための多目的システムに取り組んでいます。デバッグと、ユーザーが何らかの形で誤ったデータを提供した場合の両方のために、大きな try:/except: システムをセットアップしました。
0b0
この関数は、提供されたデータ、設定、および0b1
供給されたテキスト '0' または '1' ごとに正常に繰り返されます。ただし、「真の」バイナリへの変換に成功すると、それらを変換するために 8 つのグループを反復処理するときに失敗します (これは、何らかの理由で、他の試行でTypeErrorint(x, base)
がスローされたためです)。スローされるエラーは、次のいずれでもありません。
- TypeError
- 算術エラー
- RuntimeError (どちらにフォールバックする必要がありますか?)
- 環境エラー
- UnboundLocalError
- ルックアップ エラー
- ValueError
- インデックスエラー
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 ループを削除しました。実行を継続する必要がある場合は、終了するだけです。