我对编程很陌生,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(我已经在downloadHtmlFromUrl交互中测试了F#函数,它工作得很好。)
我意识到,在地址无效的情况下,上面的代码不会返回布尔值。相反,抛出System.Net.WebException,并带有消息"System.Net.WebException:远程服务器返回一个错误:(404)未找到“。
为了获得布尔输出,我可以做什么更改?
发布于 2015-03-26 13:49:31
也许能抓住例外?
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,无论该异常是出于什么原因引发的。如果您希望在404响应上具体返回false,则必须仔细查看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。
https://stackoverflow.com/questions/29279885
复制相似问题