只有host部分不是可选的,也就是说URI可能具有以下形式:
1. foo://user:pass@host:port
2. foo://host:port
3. user@host
4. host
Run Code Online (Sandbox Code Playgroud)
等等.如果我们有五个变量来保存这样一个URI中的部分值,那么当它们存在于URI中时,是否有一种pythonic方法将这些值分配给适当的变量?
你会使用urlparse(python 2)/ urllib.parsemodule.
该urlparse()函数可以处理您提到的所有表单,但请注意,如果没有方案,则将user@host和host部分视为路径:
>>> from urllib.parse import urlparse
>>> urlparse('foo://user:pass@host:port')
ParseResult(scheme='foo', netloc='user:pass@host:port', path='', params='', query='', fragment='')
>>> urlparse('foo://host:port')
ParseResult(scheme='foo', netloc='host:port', path='', params='', query='', fragment='')
>>> urlparse('user@host')
ParseResult(scheme='', netloc='', path='user@host', params='', query='', fragment='')
>>> urlparse('host')
ParseResult(scheme='', netloc='', path='host', params='', query='', fragment='')
Run Code Online (Sandbox Code Playgroud)
这很容易解决:
host = result.hostname or result.path.rpartition('@')[-1]
Run Code Online (Sandbox Code Playgroud)