我正在编写使用户逐行输入RLE的代码。然后,我将输入的数据发送到对它进行解码的函数。在函数中,我包含了一些基本的错误陷阱。
我的错误是,当用户只能输入不正确的数据时,他们选择的次数(他们选择他们要输入的行数)。也就是说,如果用户输入了RLE的2条(共3条)正确的行,然后输入了不正确的行,则代码不会要求再次输入RLE,但是如果用户在第一个或第二个输入中输入了不正确的行,它将起作用。
码:
if line_amount>2:
print ("Please enter the compressed data one line at a time")
while line_amount > counter:
compressed_data = input('->') #ENTER RLE DATA
counter+=1
RLEtoASCII(compressed_data,counter)
RLEtoASCII:
def RLEtoASCII(compressed_data,counter):
try:
pairs = [(int(compressed_data[i:i+2]), compressed_data[i+2]) for i in range(0, len(compressed_data), 3)]
global text
text = ''.join(n * c for n, c in pairs)
RLE_Inputs = open("Entered Data.txt", 'a+') #File that lists all the inputs
#[etc all the file writing]
except:
print('THERE WAS A PROBLEM WITH THE VALUES Please re-enter values.\n')
如果我尝试在除外之后调用
RLEtoASCII
,则会创建一个循环。除外后counter -=1
似乎不起作用...
最佳答案
通过将错误处理移出函数并移至if循环,我们可以更轻松地控制迭代:
if line_amount>2:
print ("Please enter the compressed data one line at a time")
while line_amount > counter:
compressed_data = input('->') #ENTER RLE DATA
if compressed_data != '':
try:
RLEtoASCII(compressed_data)
counter+=1
except:
print('THERE WAS A PROBLEM WITH THE VALUES Please re-enter values.\n')
RLEtoASCII:
def RLEtoASCII(compressed_data):
pairs = [(int(compressed_data[i:i+2]), compressed_data[i+2]) for i in range(0, len(compressed_data), 3)]
global text
text = ''.join(n * c for n, c in pairs)
RLE_Inputs = open("Entered Data.txt", 'a+') #File that lists all the inputs
#[etc all the file writing]
关于python - 错误陷阱与计数器结合使用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521657/