Python 'except' 条款无效

Python 'except' clauses not working

你好 Stack Overflow 社区。

我目前正在尝试学习如何在 Python (3.5) 中编程,但我遇到了转换程序的问题。总结一下,似乎 Python 忽略了源代码中的 except 子句。

try:
    print("Welcome to CONVERSION. Choose an option.")
    print("1. Convert CELSIUS to FAHRENHEIT.")
    print("2. Convert FAHRENHEIT to CELSIUS.")
    Option = int(input("OPTION: "))
except NameError:
    print(Option, " is not a valid input.")
except ValueError:
    print(Option, " is not a valid input.")
except KeyboardInterrupt:
    print("Don't do that!")
else:
    if (Option != 1) or (Option != 2):
        print("Please input a valid option!")
    elif (Option == 1):
        try:
            Celsius = float(input("Enter value in Celsius: "))
        except ValueError:
            print(Celsius, " is not a valid input.")
        except KeyboardInterrupt:
            print("Don't do that!")
        else:
            Fahrenheit = Celsius * 1.8 + 32
        print(Celsius, "C = ", Fahrenheit, "F.")
    elif (Option == 2):
        try:
            Fahrenheit = float(input("Enter value in Fahrenheit: "))
        except ValueError:
            print(Celsius, " is not a valid input.")
        except KeyboardInterrupt:
            print("Don't do that!")
            Celsius = (Fahrenheit - 32) * ( 5 / 9 )
            print(Fahrenheit, "F = ", Celsius, "C.")
        else:
            print("That value is invalid. Try again.")

完整回溯,当在第一个屏幕中输入值 "wad" 时:

Traceback (most recent call last):
File "C:\Users\user\Documents\Visual Studio 2015\Projects\TempConversion\TempConversion\TempConversion.py", line 7, in <module>
Option = int(input("OPTION: "))
ValueError: invalid literal for int() with base 10: 'wad'

 During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\user\Documents\Visual Studio 2015\Projects\TempConversion\TempConversion\TempConversion.py", line 11, in <module>
print(Option, " is not a valid input.")
NameError: name 'Option' is not defined

捕获异常后抛出异常。这基本上将其置于 try catch 场景之外。

如果在 try 之前添加 Option = None,代码应该可以正确执行。

这是因为int(input(...))在定义Option之前引发了异常。这样处理初始异常的代码就会抛出一个新的异常。

您还需要更改异常处理中的打印语句,以正确处理来自 Options 的潜在 None 值。您可以通过与此类似的方法来实现。

Option = None
try:
    Option = int(input("OPTION: "))
except (NameError, ValueError):
    if Option:
        print(Option, " is not a valid input.")
    else:
        print("No valid input.")
except KeyboardInterrupt:
     print("Don't do that!")
else:
   .....

这也适用于您为摄氏度和华氏度设置的类似代码。

[编辑] 不确定你现在出了什么问题,理想情况下你应该创建一个新问题,因为你的新问题超出了你原来问题的范围,但我准备了一个快速的、结构更简单的例子基于你的代码。

import sys


def get_input(text, convert_to='int'):
    result = None
    try:
        if convert_to == 'int':
            result = int(input(text))
        else:
            result = float(input(text))
    except (NameError, ValueError):
        if result:
            print(result, " is not a valid input.")
        else:
            print("No valid input.")
        sys.exit(1)

    return result


def handle_celsius_to_fahrenheit():
    celsius = get_input('Enter value in Celsius: ', convert_to='float')
    fahrenheit = celsius * 1.8 + 32
    print("C = %s, F %s." % (celsius, fahrenheit))


def handle_fahrenheit_to_celsius():
    fahrenheit = get_input('Enter value in Fahrenheit: ', convert_to='float')
    celsius = (fahrenheit - 32) * (5 / 9)
    print('F = %s , C %s.' % (fahrenheit, celsius))


def get_option():
    option = get_input('OPTION: ')
    if option == 1:
        handle_celsius_to_fahrenheit()
    elif option == 2:
        handle_fahrenheit_to_celsius()
    else:
        print("Please input a valid option!")
        sys.exit(1)

if __name__ == '__main__':
    print("Welcome to CONVERSION. Choose an option.")
    print("1. Convert CELSIUS to FAHRENHEIT.")
    print("2. Convert FAHRENHEIT to CELSIUS.")
    get_option()

您尝试在字符串中使用变量 Option 时出现错误,但该变量不存在,因为这是错误的原因。尝试在 try 之前启动 Option = input() 并在 try

中将其转换为 int

它正常工作。当您处理 ValueError 异常时,您尝试读取尚未设置的 Option。这导致另一个异常。你再也听不到了。