Python 忽略 if/elif 声明

Python ignoring if/elif statement

你好,编译器忽略了 if/elif 语句,我不知道为什么

我添加了一些打印以了解问题的根源,但我没有明白

def decode_frame(frame_dir, caesarn):
    #take the first frame to get width, height, and total encoded frame
    # first_frame = Image.open(str(frame_dir) + "/0.jpg")
    first_frame = Image.open(str(frame_dir) + "/" + "1.png")
    print("1")

    r, g, b = first_frame.getpixel((0, 0))
    print("2")

    total_encoded_frame = g
    print("3")
    msg = ""
    print("4")
    for i in range(1, total_encoded_frame+1):
        print("5")
        frame = Image.open(str(frame_dir) + "/" + str(i) + ".png")
        print("6")
        width, height = frame.size
        index = 0
        print("7")
        for row in range(height):
            print("8")
            for col in range(width):
                print("10")
                try:
                    print("9")
                    r, g, b = frame.getpixel((col, row))
                    print("11")
                except ValueError:
                    print("12")
                    # for some ong a(transparancy) is needed
                    r, g, b, a = frame.getpixel((col, row))
                    print("13")
                print("aa")
                if row == 0 and col == 0 :
                    print("14")
                    length = r
                    print("15")
                elif index <= length:
                    # put the decrypted character into string
                    print("tt")
                    msg += caesar_ascii(chr(r), "dec", caesarn)
                print("18")
                index += 1
            print("cc")
    #remove the first and the last quote
    msg = msg[1:-1]
    print("17")
    recovered_txt = open("data/recovered-text.txt", "w")
    print("19")
    recovered_txt.write(str(msg.encode().decode('string_escape')))
    print("20")

这是输出

9
11
aa
18
10
9
11
aa
18
10
9
11
aa
18
10
9
11
aa
18
10
9
11
aa
18
10
9
11
aa
18
10
9
11
aa
18
10
9
11
aa
18
cc
17
19
Traceback (most recent call last):
  File "C:/Users/HP/Aniss/PycharmProjects/Caesar-Cipher-Video-Steganography-master/main.py", line 103, in <module>
    decode_frame("temp", caesarn)
  File "C:\Users\HP\Aniss\PycharmProjects\Caesar-Cipher-Video-Steganography-master\functions.py", line 166, in decode_frame
    recovered_txt.write(str(msg.encode().decode('string_escape')))
LookupError: unknown encoding: string_escape

Process finished with exit code 1

报错信息表明错误在行:

    recovered_txt.write(str(msg.encode().decode('string_escape')))

特别是decode方法不知道'string_escape'是什么意思;它需要编码的名称,例如 'utf-8'.

您正试图通过四个修改来传递 msg[1:-1]encodedecodestr;这可能不是你想要的。您可能想要的是将 msg 写为文本:

    recovered_txt = open("data/recovered-text.txt", "wt")
    recovered_txt.write(msg)

注意 open 调用中的 "wt"