我是python的新手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())
谢谢。
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
您仅检查len(sys.argv) < 1 or len(sys.argv) > 1
是否是否且 len(sys.argv) == 1
是否从不参与脚本,因为sys.argv[0]
是脚本的名称。
此外,如果您使用except IndexError
,则本质上是处理(或应该处理)例外,因此Python退出而不会出错而不会在您的if-elif
条款中遇到任何情况。
您可以做这样的事情:
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)
可能会抛出其他例外。我会谨慎处理与HTTP请求相同的try-except
块中的命令行参数。