我是编程新手,F#是我的第一语言。我目前对.NET API仍然非常不熟悉。
作为初学者的项目,我想抓一个网站。我想编写一个函数,给定一个特定的URL,自动下载该页面上的所有HTML内容。但是,如果URL无效,而不是抛出System.Net.WebException消息,我想返回布尔输出“False”。
以下是我的代码的相关部分:
let noSuchURL (url: string) =
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
(我已经在F#interactive中测试了downloadHtmlFromUrl函数,它运行正常。)
我意识到上面的代码在地址无效的情况下不会返回布尔值。而是抛出System.Net.WebException,并显示消息“System.Net.WebException:远程服务器返回错误:(404)Not Found”。
我可以进行哪些更改以获得布尔输出?
答案 0 :(得分:2)
也许抓住异常?
let noSuchURL (url: string) =
try
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
with :? System.Net.WebException -> false
有一点需要注意:如果存在false
,此程序将返回WebException
,无论引发异常的原因是什么。如果您想要专门回复false
404回复,则必须仔细查看WebException
:
let noSuchURL (url: string) =
try
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
with
:? System.Net.WebException as e
when e.Status = WebExceptionStatus.ProtocolError ||
e.Status = WebExceptionStatus.NameResolutionFailure
-> false
有关F#中例外的更多信息,请查看https://msdn.microsoft.com/en-us/library/dd233194.aspx。