我正在写一个将二进制转换成十进制的python代码。
def bin_dec (binary):
binary_list = list(str(binary))
**for bit in binary_list:
if int(bit) > 1 or int(bit) < 0:
print('Invalid Binary')
print('')
exit()**
total = 0
argument = 0
binary_length = len(str(binary))
exponent = binary_length - 1
while exponent >= 0:
total += (int(binary_list[argument]) * (2**exponent))
argument += 1
exponent -= 1
print(total)
print('')
当我用负数二进制代码测试代码时,我看不到输出“Invalid Binary”
相反,我看到一个整数错误
>>> bin_dec(-10)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
bin_dec(-10)
File "E:/Bronx Science/Sophomore/Computer Science_Python/Edwin Chen_Lab 8_Diamond and Squares.py", **line 27, in bin_dec
if int(bit) > 1 or int(bit) < 0:**
ValueError: invalid literal for int() with base 10: '-'
最佳答案
您说ValueError
时会立即引发int(bit)
,因为bit
是'-'
。您永远不会到达代码的下一行,因为未捕获到异常,因此它引发了脚本的全部故障。
代替:
for bit in binary_list:
if int(bit) > 1 or int(bit) < 0:
print('Invalid Binary')
exit()
您可以执行以下操作:
for bit in binary_list:
try:
assert 0 <= int(bit) <= 1
except AssertionError, ValueError:
print('Invalid Binary')
exit()
注意,在函数中调用
exit()
通常被认为是不好的做法。如果仅允许引发异常,则无论如何都会导致脚本退出,因此您可以执行以下操作:for bit in binary_list:
assert 0 <= int(bit) <= 1, 'Invalid Binary'
或许:
assert all(bit in {'0', '1'} for bit in binary_list), 'Invalid Binary'
并获得基本相同的效果(加上一个堆栈跟踪,它将告诉用户确切杀死了脚本的内容)。这种方法的区别在于,如果函数的调用者确定他们想要做其他事情(例如,尝试提示用户输入另一个数字),则可以选择使用
catch
记录异常;如果您只是exit()
,则他们没有机会修复该错误。
关于python - 尝试将二进制转换为十进制: ended with a weird int error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61256730/