我是python中的新手,我正在尝试构建一个脚本,该脚本将URL作为参数获取并向网站发送GET请求,然后从响应和HTML正文中打印详细信息。
我写的代码:
import sys
import urllib.request
url = 'https://%s' % (sys.argv[1])
res = urllib.request.urlopen(url)
print('Response from the server:'+'\n', res.info())
print('HTML web page:'+'\n', res.read())
现在,我想检查一个参数是否通过CMD传递,如果没有通过它发出警报。 并且还要打印状态代码和原因。 什么是理性意味着什么? 这是我到目前为止所得到的,我不明白为什么我没有得到任何结果。
我目前的代码是:
import sys
import urllib.request, urllib.error
try:
url = 'https://%s' % (sys.argv[1])
res = urllib.request.urlopen(url)
except IndexError:
if len(sys.argv) < 1:
print(res.getcode())
print(res.getreason())
elif len(sys.argv) > 1:
print('Response from the server:'+'\n', res.info())
print('HTML web page:'+'\n', res.read())
print('Status Code:', res.getcode())
谢谢。
答案 0 :(得分:1)
只有当你在命令行中没有给出任何参数时,才会执行except
块。仅在引发IndexError异常时才会执行。我相信只需打印错误消息就足够了。打印语句应在try
块内处理。
import sys
import urllib
from urllib2 import URLError
try:
url = 'https://%s' % (sys.argv[1])
#url = r'https://www.google.com'
res = urllib.urlopen(url)
print('Response from the server:' + '\n', res.info())
print('HTML web page:' + '\n', res.read())
print('Status Code:', res.getcode())
except IndexError as e:
print e.message
except URLError as e1:
print e1.reason
注意:我使用的是python 2.7。所以我没有使用urllib.request.urlopen(),因为这在python 2.x中不是必需的
答案 1 :(得分:1)
您只检查len(sys.argv) < 1 or len(sys.argv) > 1
是否len(sys.argv) == 1
,如果您在没有任何参数的情况下运行脚本将会是sys.argv[0]
,因为except IndexError
是脚本的名称。< / p>
此外,如果你使用if-elif
,你实际上是处理(或应该处理)异常,所以python退出时没有错误而没有在import sys
import urllib
try:
url = 'https://%s' % (sys.argv[1])
res = urllib.request.urlopen(url)
except IndexError:
if len(sys.argv) <= 1:
print("Too few arguments")
raise # <- or replace with sys.exit(1) if you don't want to propagate the exception
子句中出现任何情况。
你可以这样做:
urllib.request.urlopen(url)
实际的try-except
可能会抛出其他异常。我会小心处理与http请求相同的 public void Do()
{
foreach (var annotation in _annotations)
_annotationManager.Remove(annotation);
}
块中的命令行参数。