这是我的项目(我无法完全分享)的一个功能,用于不断失败的工作。我们正在使用 Raspberry Pi 开发用于数据采集和电机控制的多用途系统。我建立了一个大型的 try:/except: 系统来进行调试以及如果我们的用户以某种方式提供错误数据。
该函数通过提供的数据成功迭代,设置0b0
并0b1
为每个提供给它的文本“0”或“1”。但是,一旦它成功转换为“真正的”二进制文件,它会在迭代八个一组以转换它们时失败(这是因为,由于某种原因,其他尝试int(x, base)
抛出了TypeError)。抛出的错误不是以下任何一种:
- 类型错误
- 算术错误
- RuntimeError (它应该回退到,对吗?)
- 环境错误
- UnboundLocalError
- 查找错误
- 值错误
- 索引错误
运行for i in range(0, floor(length / 8), 1):
and 子代码也会引发错误,但没有描述 - 它只是失败了。这几天我一直在调试这个奇异的功能,这似乎是最后一个问题,但我真的不知道它为什么会失败。函数 ,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: 系统已经到位,以识别我的错误,并为最终用户解决问题奠定基础。
我已经查看了十多个不同的帖子,但无济于事。我找不到这个错误,我不得不以这种方式设置它,因为int(x, base)
无法转换任何东西- 请参阅此处的这篇文章(在 python 中将字符串转换为二进制),这是我尝试使用的一种解决方案。
至于exit()
调用,这样我们就不会得到二十个异常堆积在一起的无限循环,因为这个函数是在循环的一部分中调用的。
我做错了什么,我该如何解决?是我应该注意到的一些愚蠢的小事(Python 不是我的首选语言),还是完全是别的东西?任何帮助表示赞赏。这只是让我有点发疯 - 我看过的任何东西都无法解决它或导致我这样做的问题。
编辑:人们已经说过要在没有裸露的情况下放置回调except:
,正如我之前所说,它什么也没提供。它只是失败了。没有错误代码,没有回溯,什么都没有。我在这里说实话 -except:
从测试代码和循环中删除了。它所做的只是退出,它应该继续运行。