【问题标题】:Code Gives an error when input is a string when trying to change to an int, try/except does not catch it代码尝试更改为 int 时输入为字符串时出错,try/except 不会捕获它
【发布时间】:2021-11-28 16:38:37
【问题描述】:

我正在编写一段 python 代码,允许您切换默认打印机。它将wmic printer list brief 的数据输出到一个 .json 文件中,并列出那些带有分配编号的打印机。如果输入未包含在数字中,则会向用户抛出错误。如果用户输入一个字符而不是数字,则从 string 到 int 的转换失败,我无法获得 try/except 来捕获错误。任何帮助都会很棒!

    def setDefaultPrinter():
    with open('resources/data.json') as json_file:
        data = json.load(json_file)
        loopvalue = 1
        print('\n List of avalible printers: \n')
        printerlist = []
        error = False
        for i in data:
            print(str(loopvalue) + ". " + i)
            loopvalue += 1
            printerlist.append(i)
            #any(printer in x for x in lst)
        try:
            global printer
            printer = int(input("\nWhat printer do you want to use? (Number on the side): "))
        except ValueError:
            print("Please enter a number, not a letter")
            error = True
        except Exception:
            print("Internal Error")
        try:
            if printer == None:
                print("Error")
        except Exception:
            print("ERROR")
            error = True
        if printer <= len(printerlist) and not error:
            printer = int(printer)
            printervalue = printer - 1
            printername = printerlist[printervalue]
            print(printername)
        else:
            if error == False:
                print("Invalid Responce")

【问题讨论】:

    标签: python json printing integer wmic


    【解决方案1】:
    def setDefaultPrinter():
    with open('resources/data.json') as json_file:
        data = json.load(json_file)
        loopvalue = 1
        print('\n List of avalible printers: \n')
        printerlist = []
        error = False
        for i in data:
            print(str(loopvalue) + ". " + i)
            loopvalue += 1
            printerlist.append(i)
            #any(printer in x for x in lst)
        printer = input("\nWhat printer do you want to use? (Number on the side): ")
        if not printer.isdigit():
            error = True
            print("\nValue Error: Please Check Your Input")
        if not error and int(printer) <= len(printerlist):
            printer = int(printer)
            printervalue = printer - 1
            printername = printerlist[printervalue]
            print(printername)
        else:
            if error == False:
                print("Invalid Responce")
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2020-04-10
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多