Python编写凯撒密码时调用list.index()查无字符报错如何解决
问题原因
Python列表的index()方法查找不存在的元素时,不会返回None,会直接抛出ValueError异常,因此你原有逻辑里的if indeksik == None判断无法生效,遇到空格、符号等非字母字符时就会直接报错。
解决方法
推荐两种可直接使用的实现方案:
- 方案1:先判断字符归属,再执行移位逻辑(可读性更高)
def encrypt(text, shift): text_encrypted = [] for letter in text: # 非字母字符直接追加 if letter not in alphabet: text_encrypted.append(letter) else: indeksik = alphabet.index(letter) # 此处后续可自行补充移位超过'z'的处理逻辑 text_encrypted.append(alphabet[indeksik + shift]) # 拼接列表为字符串返回 return ''.join(text_encrypted)
- 方案2:捕获异常处理(适合不想提前做归属判断的场景)
def encrypt(text, shift): text_encrypted = [] for letter in text: try: indeksik = alphabet.index(letter) text_encrypted.append(alphabet[indeksik + shift]) except ValueError: # 捕获到字符不在字母表的异常时直接追加原字符 text_encrypted.append(letter) return ''.join(text_encrypted)
调用示例
函数调用时需要接收返回值才能拿到加密结果,示例如下:
encrypted_text = encrypt(text, shift) print(encrypted_text)
内容的提问来源于stack exchange,提问作者Rounded Hedgehog
相关产品推荐
相关产品推荐

