我正在尝试使用1-65535
验证URL中的端口号(范围urlparse
)。
棘手的部分是,如果URL中没有端口号,则urlparse(url).port
被标识为NoneType
因此,我试图根据数据类型进行简单的比较,但实际上并没有奏效,如本例所示。
如果我使用NoneType
作为数据类型,
elif type(u.port) == NoneType:
我遇到错误
NameError: name 'NoneType' is not defined
我没有使用validators
,因为它无法正确验证端口号。
Python: `validators.url` does not accept port number from 1-9, but accept port bigger than 65535?
TCP / UDP端口号范围从1-65535开始。但是,validators
无法识别端口1-9
,并且仍然接受大于65535
的无效端口。
代码
from urllib.parse import urlparse
def test(url):
global u
u = urlparse(url)
print(' Port : ', u.port)
print(' Data Type : u.port %s\n'% type(u.port))
for url in ['example.com', 'example.com:1', 'http://example.com:1']:
print(url)
test(url)
if type(u.port) == int:
print(' Integer')
elif type(u.port) == None:
print(' None')
# elif type(u.port) == NoneType: # NameError: name 'NoneType' is not defined
# print(' None')
输出
example.com
Port : None
Data Type : u.port <class 'NoneType'>
example.com:1
Port : None
Data Type : u.port <class 'NoneType'>
http://example.com:1
Port : 1
Data Type : u.port <class 'int'>
Integer
答案 0 :(得分:7)
不要比较类型以检查None
,请使用:
elif u.port is None:
print(' None')
答案 1 :(得分:2)
您还可以通过以下方式检查NoneType:
unpivot