2017-01-06 24 views
5

python 3.5.2AttributeError: module 'urllib' không có thuộc tính 'phân tích'

đang 1

import urllib 
s = urllib.parse.quote('"') 
print(s) 

nó đã cho lỗi này:

AttributeError: module 'urllib' has no attribute 'parse'

2 mã

from urllib.parse import quote 
# import urllib 
# s = urllib.parse.quote('"') 
s = quote('"') 
print(s) 

nó hoạt động ...

code3

from flask import Flask 
# from urllib.parse import quote 
# s = quote('"') 
import urllib 
s = urllib.parse.quote('"') 
print(s) 

nó hoạt động, quá. vì bình?

Tại sao tôi không còn gặp lỗi nữa? nó là một lỗi?

+2

Bạn phải nhập urllib.parse'. Tôi giả định rằng 'Flask' ​​cũng nhập' urllib.parse', và đó là lý do tại sao ví dụ thứ ba của bạn hoạt động. – DyZ

Trả lời

4

Gói urllib chỉ đóng vai trò không gian tên. Có các mô-đun khác theo số urllib như requestparse.
Để tối ưu hóa nhập urllib không nhập các mô-đun khác theo đó. Bởi vì làm như vậy sẽ tiêu thụ bộ xử lý chu kỳ và bộ nhớ, nhưng mọi người có thể không cần những mô-đun khác.
Các mô-đun riêng lẻ dưới urllib phải được nhập riêng biệt tùy theo nhu cầu.

Hãy thử những điều này, lần đầu tiên không thành công nhưng lần thứ hai thành công vì khi flask được nhập flask chính nó nhập urllib.parse.

python3 -c 'import urllib, sys;print(sys.modules["urllib.parse"])' 
python3 -c 'import flask, sys;print(sys.modules["urllib.parse"])' 
3

Đối mã 1 để làm việc bạn cần phải nhập khẩu các mô-đun urllib.parse, không phải là chức năng quote. Bằng cách này, bạn có thể tham khảo hàm quote với vòng loại mô-đun đầy đủ. Với phương pháp này bạn có thể sử dụng bất kỳ chức năng định nghĩa trong module parse:

import urllib.parse 
s = urllib.parse.quote('"') 
print(s) 

2 mã công trình, bởi vì bạn nhập chỉ parse chức năng và tham khảo nó mà không cần đun vòng loại, vì nó không được nhập khẩu bối cảnh của mô-đun. Với phương pháp này, bạn chỉ có thể sử dụng chức năng được nhập khẩu rõ ràng từ mô-đun parse.

mã 3 hoạt động, vì flask nhập khẩu ngầm định mô-đun urllib.parse. Mô-đun parse có sẵn trong ngữ cảnh mô-đun urllib. Khi bạn nhập urllib, urllib.parse trở nên có sẵn và bạn có thể sử dụng nó như trong mã 1

Các vấn đề liên quan