Try/except to check string
我对如何使用
1 2 3 4 | if url[-4:] ==".html": // do your things else: print('Error! the file is not html file') |
我正在检查是否应该在这种情况下使用
简而言之:
1 2 | try: a = q.get() |
1 2 | except: a = None |
更新:
1 2 3 4 5 | try: url[-4:] ==".html" except: print"Error" |
在python中,请求宽恕比请求允许更容易。换句话说,python中的惯用方法就是让异常被抛出并做出相应的反应,而不是显式地检查条件("look before you leap",也在链接的词汇表中)。所以您的代码应该如下所示:
1 2 3 4 | try: # do your thing with `url` except: print('Error! the file is not html file') |
如果希望文件名以".html"结尾,则可以使用if进行测试。
如果希望冒泡出一个异常并在上面几级代码处捕获它,也可以使用断言:
1 | assert url.lower().endswith(".html"), u"the file name must end in .html" |
它只是用于以下目的的句法糖分:
1 2 3 4 | if url.lower().endswith(".html"): do_your_things_with_url(url) else: raise YourCustomException('the url must end in".html"') |
当然,用以下方法取代一个简单的
1 2 3 4 5 6 | try: assert url.lower().endswith(".html") except AssertionError: print('Error! url does not end in".html"') else: do_your_things_with_url(url) |
因此,在回答您的问题时,如果字符串以".html"结尾,您可能应该使用
PS:这种样式被称为lbyl(在跳跃之前先看一下),在Python中它没有任何问题。另一种选择是EAFP(请求宽恕比请求允许更容易)。这两种方法都可以,并且在大多数情况下都被认为是惯用的,但也有一些例外(例如duck类型,EAFP样式明显优于使用
与其检查文件扩展名,不如尝试将文件解析为HTML,然后在发生HTML解析异常时向用户显示一个有用的错误。例如,使用BeautifulSoup和HTMLParser:
1 2 3 4 5 6 7 | from bs4 import BeautifulSoup from html.parser import HTMLParseError try: BeautifulSoup(fetched_url_contents) except HTMLParseError: print("Error: you haven't given me html!") |