Replacing if-else statement with Exception Handling
我现在有下面的函数,其中包含一个
1 2 3 4 5 6 7 8 9 10 11 12 13 | def update(self, currency): if self.currency == 'AUD': url = 'http://www.rba.gov.au/statistics/tables/csv/f17-yields.csv' response = urllib2.urlopen(url) text = response.read() csvfile = StringIO.StringIO(text) df = pd.read_csv(csvfile) print df else: print('This currency is not available in Database') |
你通常不想在同一个地方引发和捕获异常。相反,您希望在第一次发现错误的地方引发异常,并在报告该问题有意义的地方捕获它。
在您所显示的代码中,您只需要将
1 | raise ValueError('This currency is not available in Database') |
由于您还没有显示在哪里调用
使用异常处理而不是
我在这里为查找字典中的键列表做了类似的比较基准,并附上了时间安排。对我来说,慢了5倍。
如果要强制处理异常,可以使用断言:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def update(self, currency): try: assert self.currency == 'AUD' url = 'http://www.rba.gov.au/statistics/tables/csv/f17-yields.csv' response = urllib2.urlopen(url) text = response.read() csvfile = StringIO.StringIO(text) df = pd.read_csv(csvfile) print df except AssertionError: print('This currency is not available in Database') |
在这种情况下不一定是理想的(在我看来,这是一个lbyl方案),因为假设您从各种不同的货币开始,平等测试应该更快、更可读,并且能够更好地扩展到更多的货币。