首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -消息加密返回“`NoneType`”错误

Python -消息加密返回“`NoneType`”错误
EN

Stack Overflow用户
提问于 2017-10-14 17:41:41
回答 2查看 214关注 0票数 1

我试图使用偶数和奇数的定义来加密我的消息。函数def swap_letters(message)就是我所使用的:

  • 我循环使用‘’message =message+‘x’‘的奇数字母和偶数字母列表;
  • 然后,将下一个奇数字母添加到"for counter in range(0, int(len(message)/2)): ...的最终消息中;
  • 最后,我使用"letter_1.append(even_letters[counter])...将下一个偶数字母添加到最后消息中

我通过加入new_message来制作letter_1,然后返回它

我犯了什么错误,应该如何修复这段代码才能让它正确运行?

代码语言:javascript
复制
import tkinter as Tk 
from tkinter import messagebox, simpledialog, Tk

def is_even(number):
    return number % 2 == 0

def get_even_letters(message):
    even_letters = []
    for counter in range(0, len(message)):
        if is_even(counter):
            even_letters.append(message[counter])


def get_odd_letters(message):
    odd_letters = []
    for counter in range(0, len(message)):
        if not is_even(counter):
            odd_letters.append(message[counter])
    return odd_letters

def swap_letters(message):
    letter_1 = []
    if not is_even(len(message)):
        message = message + 'x'
    even_letters = get_even_letters(message)
    odd_letters = get_odd_letters(message)
    for counter in range(0, int(len(message)/2)):
        letter_1.append(odd_letters[counter])
        letter_1.append(even_letters[counter])
    new_message = ''.join(letter_1)
    return new_message

def get_message():
    message = simpledialog.askstring('Message', 'Enter the secret here: ')
    return message

def get_task():
    task = simpledialog.askstring('Task', 'Do you want to encrypt or decrypt?')
    return task

root = Tk()

while True:
    task = get_task()
    if task == 'encrypt':
        message = get_message()
        encrypted = swap_letters(message)
        messagebox.showinfo('Ciphertext of the secret message is:', encrypted)
    elif task == 'decrypt':
        message = get_message()
        decrypted = swap_letters(message)
        messagebox.showinfo('Plaintext of the secret message is:', decrypted)
    else:
        break
root.mainloop()

,这是我得到的错误

代码语言:javascript
复制
    Traceback (most recent call last):
  File "T:\Sublime Text 3\shhhhh.py", line 47, in <module>
    encrypted = swap_letters(message)
  File "T:\Sublime Text 3\shhhhh.py", line 29, in swap_letters
    letter_1.append(even_letters[counter])

TypeError: 'NoneType' object is not subscriptable
[Finished in 21.2s with exit code 1]
[shell_cmd: python -u "T:\Sublime Text 3\shhhhh.py"]
[dir: T:\Sublime Text 3]
[path: C:\Program Files (x86)\Python36-32\Scripts\;C:\Program Files `(x86)\Python36-32\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Xoreax\IncrediBuild;C:\Users\mwliv\AppData\Local\Microsoft\WindowsApps;]`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-14 17:44:47

您的get_even_letters函数不显式地返回任何内容,因此它隐式地返回None,因此您稍后将看到错误。添加一个return语句应该可以解决这个问题:

代码语言:javascript
复制
def get_even_letters(message):
    even_letters = []
    for counter in range(0, len(message)):
        if is_even(counter):
            even_letters.append(message[counter])

    return even_letters # Here!
票数 1
EN

Stack Overflow用户

发布于 2017-10-14 21:01:22

只需修改代码如下:-

代码语言:javascript
复制
for counter in range(0, int(len(message)/2)):
    # You need to verify whether values are None type or not before calling append 
    if(odd_letters != None):
        letter_1.append(odd_letters[counter])
    if(even_letters != None):
        letter_1.append(even_letters[counter])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46747494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档