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