You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中decryptor函数未满足条件却自动执行的问题求助

函数无需触发自动执行的问题分析

你的decryptor函数会在程序启动时自动执行,完全不受主程序if条件的控制,问题根源出在Decryptor.py文件的代码里。

主程序代码

from Decryptor import decryptor  # 注意:Python导入模块时不需要加.py后缀

userInput = int(input("请选择模式?(1-4) "))

if userInput == 3:
    decryptor()

注:无论用户输入是否为3,decryptor函数都会在程序运行时立刻执行。

Decryptor.py代码(问题版本)

# 来自Decryptor.py的代码
import os
from cryptography.fernet import Fernet

def decryptor():
    fileName = input("请输入要解密的文件名(区分大小写):")

    with open(fileName + ".key", "rb") as file:
        key = file.read()

    key = Fernet(key)

    with open(fileName + ".json", "rb") as encryptedFile:
        passwordFile = encryptedFile.read()

    decrypt = key.decrypt(passwordFile)

    with open(fileName + ".json", "wb") as decryptedFile:
        decryptedFile.write(decrypt)

    print("文件已解密完成。")

decryptor()  # 问题核心:模块被导入时,这行顶级代码会自动执行

注:Python模块被导入时,模块内的所有顶级代码(包括函数定义外的代码)都会被执行。这里最后一行直接调用decryptor(),导致只要主程序导入Decryptor模块,函数就会立刻运行,和主程序的if条件无关。

解决方案

修改Decryptor.py,把直接调用函数的代码改成仅在模块自身运行时才执行的形式:

# 修改后的Decryptor.py
import os
from cryptography.fernet import Fernet

def decryptor():
    fileName = input("请输入要解密的文件名(区分大小写):")

    with open(fileName + ".key", "rb") as file:
        key = file.read()

    key = Fernet(key)

    with open(fileName + ".json", "rb") as encryptedFile:
        passwordFile = encryptedFile.read()

    decrypt = key.decrypt(passwordFile)

    with open(fileName + ".json", "wb") as decryptedFile:
        decryptedFile.write(decrypt)

    print("文件已解密完成。")

# 仅当直接运行Decryptor.py时,才执行decryptor函数
if __name__ == "__main__":
    decryptor()

修改后,主程序导入Decryptor模块时不会自动执行decryptor函数,只有当用户输入为3,触发if条件里的decryptor()调用时,函数才会执行。

内容的提问来源于stack exchange,提问作者user19597157

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:46:04