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

Python脚本在Visual Studio 2022外运行闪退,VS内正常求助

问题原因与解决办法

核心闪退原因

  1. keyboard库权限不足:该库监听键盘需要管理员权限,VS2022默认以管理员身份启动,所以能正常运行;而外部CMD/终端如果不是管理员权限,调用keyboard.is_pressed()会直接抛出异常导致闪退。
  2. 函数调用顺序错误:主循环中调用options()时,该函数定义在主循环之后,触发NameError异常,外部运行时直接崩溃退出。
  3. 无异常捕获与退出暂停:脚本遇到错误时直接终止,没有任何提示就关闭窗口,无法排查问题。

分步解决

  • 以管理员身份运行终端:右键CMD/PowerShell,选择「以管理员身份运行」,再执行python your_script.py。
  • 调整函数定义顺序:把options()、comConf()、lockedConf()这些函数移到主循环之前,确保调用时函数已定义。
  • 添加异常捕获与退出暂停:在脚本中加入异常捕获,打印错误信息,并用input()暂停窗口,方便查看问题。
  • 可选:替换keyboard库:如果不想用管理员权限,可以改用pynput库,它不需要管理员权限就能监听键盘输入。

修正后的完整代码

from turtle import clearscreen
import keyboard
import time
import os
import colorconsole
import sys

# 提前定义所有函数,避免调用时未定义
def comConf():
    print("input desired COM-port and press enter")
    comDesire = input()

def lockedConf():
    passwordInput = input("password:")
    if passwordInput == "supersecretpassword":
        print("welcome admin person")

def options():
    i2 = 0

    def optionsMenue():
        if i2 == 0:
            print(" >", end="")
        print("back")
        if i2 == 1:
            print(" >", end="")
        print("select COM-port")
        if i2 == 2:
            print(" >", end="")
        print("locked config")

    optionsMenue()
    while True:
        if keyboard.is_pressed('down'):
            i2 = i2 + 1
            if i2 == 3:
                i2 = 0
            clear()
            optionsMenue()
        elif keyboard.is_pressed('up'):
            i2 = i2 - 1
            if i2 == -1:
                i2 = 2
            clear()
            optionsMenue()
        if keyboard.is_pressed('enter'):
            if i2 == 0:
                clear()
                menue()
                break
            if i2 == 1:
                comConf()
            if i2 == 2:
                lockedConf()
        time.sleep(0.1)

def bootloader():
    print("what bootloader do you require?")

def systemController():
    print("what unit do you wish to program?")

i = 0
def clear():
    os.system("cls")

def menue():
    if i == 0:
        print(" >", end="")
    print("bootloader programming")
    if i == 1:
        print(" >", end="")
    print("system controller programming")
    if i == 2:
        print(" >", end="")
    print("options")

menue()

try:
    while True:
        if keyboard.is_pressed('down'):
            i = i + 1
            if i == 3:
                i = 0
            clear()
            menue()
        elif keyboard.is_pressed('up'):
            i = i - 1
            if i == -1:
                i = 2
            clear()
            menue()
        elif keyboard.is_pressed('enter'):
            if i == 0:
                bootloader()
            if i == 1:
                systemController()
            if i == 2:
                options()

        time.sleep(0.1)
except Exception as e:
    print(f"发生错误: {str(e)}")
    input("按回车键退出...")  # 暂停窗口,查看错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:36