Python 多个if-else的Raise ValueError

Python 多个if-else的Raise ValueError,python,python-2.7,Python,Python 2.7,每当城市无效时,我想提出ValueError。如何做到这一点?我对您的代码进行了一点重构,但它展示了如何提出: 样本输出: def validate_city(city): city = city.title() # Capitalize properly # use set(["Pune", "Delhi"]) for backwards-compatibility valid_cities = {"Pune", "Delhi"} if city in val

每当城市无效时,我想提出ValueError。如何做到这一点?

我对您的代码进行了一点重构,但它展示了如何提出:

样本输出:

def validate_city(city):
    city = city.title()  # Capitalize properly
    # use set(["Pune", "Delhi"]) for backwards-compatibility
    valid_cities = {"Pune", "Delhi"}
    if city in valid_cities:
        print "This is %s city" % city
    else:
        raise ValueError("Invalid city %s" % repr(city))
验证城市(“高谭市”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“”,第7行,位于纽约市 ValueError:无效的城市“Gotham city” >>>新德里市 这是德里市 注:

  • 集合用于查找有效的城市,这比许多行if语句更易于维护
  • 一套是
  • 该方法用于正确大写城市名称。在验证用户输入之前规范化用户输入是一种很好的做法。即把“德里”变成“德里”,“纽约”变成“纽约”等等

我对您的代码进行了一点重构,但它展示了如何提高:

样本输出:

def validate_city(city):
    city = city.title()  # Capitalize properly
    # use set(["Pune", "Delhi"]) for backwards-compatibility
    valid_cities = {"Pune", "Delhi"}
    if city in valid_cities:
        print "This is %s city" % city
    else:
        raise ValueError("Invalid city %s" % repr(city))
验证城市(“高谭市”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“”,第7行,位于纽约市 ValueError:无效的城市“Gotham city” >>>新德里市 这是德里市 注:

  • 集合用于查找有效的城市,这比许多行if语句更易于维护
  • 一套是
  • 该方法用于正确大写城市名称。在验证用户输入之前规范化用户输入是一种很好的做法。即把“德里”变成“德里”,“纽约”变成“纽约”等等
city='some city'
如果城市==“浦那”:
打印“这是浦那城”
elif city==“德里”:
打印“这是德里市”
其他:
提升值错误(“无效城市”)
回溯(最近一次呼叫最后一次):
文件“”,第8行,在
提升值错误('无效城市')
ValueError:无效城市
城市='某个城市'
如果城市==“浦那”:
打印“这是浦那城”
elif city==“德里”:
打印“这是德里市”
其他:
提升值错误(“无效城市”)
回溯(最近一次呼叫最后一次):
文件“”,第8行,在
提升值错误('无效城市')
ValueError:无效城市

这取决于您想如何处理这种情况。但是,您将使用该命令

city = 'some city'

if city == 'Pune':
    print "this is pune city"
elif city == 'Delhi':
    print "this is Delhi city"
else:
    raise ValueError("Invalid City")

Traceback (most recent call last):
  File "<pyshell#2>", line 8, in <module>
    raise ValueError('Invalid City')
ValueError: Invalid City
在您确定这是一个无效的城市时

raise ValueError

这取决于你想如何处理这种情况。但是,您将使用该命令

city = 'some city'

if city == 'Pune':
    print "this is pune city"
elif city == 'Delhi':
    print "this is Delhi city"
else:
    raise ValueError("Invalid City")

Traceback (most recent call last):
  File "<pyshell#2>", line 8, in <module>
    raise ValueError('Invalid City')
ValueError: Invalid City
在您确定这是一个无效的城市时

raise ValueError


当城市无效时,您的代码不向我显示消息“无效城市”,它将引发异常。你的脚本显示了什么?请查看编辑后的帖子,看看你是否在做我正在做的事情。我在其他地方使用了catch,这就是为什么它没有显示消息。当城市无效时,你的代码不会向我显示消息“Invalid City”。它将引发异常。你的脚本显示了什么?请查看编辑后的帖子,看看你是否在做我正在做的事情。我在其他地方使用了catch,这就是为什么它没有显示消息它对我有用。你能发布你正在运行的确切代码,包括你的测试输入吗?如果你在
try/catch
块中,错误可能会被丢弃。现在你可以自己尝试这个函数,我还用一些示例用法更新了示例。细节不多,但在这种情况下,我通常会使用set而不是list来提高查找效率。即使对于非常短的列表/集合,基于我使用
timeit
的迷你基准测试,一个包含两个项目的集合/列表和一个失败的查找加上一个成功的查找,集合速度也会提高约25%。如果只运行此函数一次,它将只为您节省约200纳秒的时间-重写函数、对其进行基准测试等将花费您更长的时间。过早优化是。。。有趣,对我有用。你能发布你正在运行的确切代码,包括你的测试输入吗?如果你在
try/catch
块中,错误可能会被丢弃。现在你可以自己尝试这个函数,我还用一些示例用法更新了示例。细节不多,但在这种情况下,我通常会使用set而不是list来提高查找效率。即使对于非常短的列表/集合,基于我使用
timeit
的迷你基准测试,一个包含两个项目的集合/列表和一个失败的查找加上一个成功的查找,集合速度也会提高约25%。如果只运行此函数一次,它将只为您节省约200纳秒的时间-重写函数、对其进行基准测试等将花费您更长的时间。过早优化是。。。有趣。