错误陷阱与计数器不工作相结合



我正在制作一个代码,让用户逐行输入 RLE。然后,我将输入的数据发送到对其进行解码的函数。在该函数中,我包含了一些基本的错误捕获。

我的错误是,当用户只能输入错误数据时,他们选择的次数(他们选择他们想要输入的行数(。 即,如果用户输入 2 行(共 3 行(正确的 RLE,然后输入错误的行,则代码不会要求再次输入 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')

如果我尝试在 except 之后调用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]

尝试将while line_amount > counter:中的>更改为>=。这是因为当你到达第三行时,它正在测试3>3是否为假,而3>=3为真。

问题似乎是即使您发现错误,counter也会递增。我将计数器更改为全局,以便在出现错误时它不会有效地递增。只要确保你把global counter放在你的定义之上。让我知道这是否适合您。

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)

RLEtoASCII:

def RLEtoASCII(compressed_data):
global 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')
counter-=1

最新更新