Làm cách nào để thay đổi python3 thành python3 6?

Bản nâng cấp Python lớn cuối cùng — lên phiên bản 3 — đã đến vào tháng 12. 2008, nearly 12 years ago. Tuy nhiên, rất có thể bạn vẫn đang làm việc trên mã thử nghiệm hoặc sản phẩm Python 2. If so, then you may be  seeing the below deprecation message as a reminder to update the Python version you’re working with

“KHÔNG DÙNG. Python 2. 7 sẽ kết thúc vòng đời vào ngày 1 tháng 1 năm 2020. Vui lòng nâng cấp Python của bạn thành Python 2. 7 sẽ không được duy trì sau ngày đó. Phiên bản tương lai của pip sẽ bỏ hỗ trợ cho Python 2. 7. ”

Please take this seriously and plan accordingly. Python cập nhật lên 3. x không tương thích ngược. Những gì bạn viết với Python 2. x có thể không hoạt động bình thường khi sử dụng 3. x.

Hãy chắc chắn cũng đọc bản in đẹp. Theo trang web dành cho ngôn ngữ lập trình, ngày phát hành nâng cấp Python cuối cùng vẫn là TBD. “Là người cuối cùng trong 2 người. sê-ri x, 2. 7 sẽ nhận được hỗ trợ sửa lỗi cho đến năm 2020. Hỗ trợ chính thức ngừng vào ngày 1 tháng 1 năm 2020, nhưng bản phát hành cuối cùng sẽ diễn ra sau ngày đó. ” [1]

Vì vậy, Python 2 sẽ chuyển sang chế độ không được hỗ trợ vào cuối năm nay. If you haven’t yet done so, now is a good time to migrate the current Python 2 code to Python 3 syntax and stick to Python 3 going forward

Why don’t teams just jump start on this migration? One of the major hurdles is that the majority of working code simply breaks [read more at why-was-python-3-made-incompatible-with-python-2], either because of the direct language syntax or issues with third party APIs. Let’s be fair here. few of us would bother with migration if the new Python updates were backwards compatible. Instead, version 2 will go unsupported, forcing many — including us here at Couchbase — to prioritize migration. Even if the team crosses the bug fix support deadline, it’s ok [because your code is still working]. As a team, we decided it’s better to migrate as close to this date as possible so that we are on the same page with other Python community members and learn alongside them.   

This document is a collection of tips and tricks we learned while upgrading to Python 3 along with common problems we encountered during the Couchbase test infra migration process. As you’ll see we manually update python by command line after kick-starting with an automated process. Your approach may be different. Regardless, start as soon as you can. Updating python from version 2 to version 3 is important

Couchbase is an open source Enterprise-class MultiCloud to Edge NoSQL Database. The Couchbase functional testing framework, TestRunner has been developed in Python 2. The TestRunner git  repository can be found at https. //github. com/couchbase/testrunner .   Our goal now is to completely switch to Python 3 runtime instead of co-running with both Python 3 and Python 2.

As part of the Python upgrade process, we have identified the major changes needed to successfully port to version 3. Some of the problems you’ll read about we identified during the porting process. Our aim in sharing our learnings is to help you with your own migration. You can pick the latest Python 3. x version [it depends on the pre-release, stable, security-fixes version on a specific platform, 3. 7 or 3. 6], which we are referring to as Python 3 throughout this blog. See more details on the release at Python releases download and  Python 3 documentation.

Cheat Sheet

 

Sự thay đổi chính. Python 2 vs. Python 3

To get an idea on the key changes, here is the summary list of code changes needed from Python 2 to Python 3

Python 2Python 3 Text utf-8 . str
Text is unicode . str
u”Binary is same as Text. bytes/str
Example.
file. read[6] == ‘GIF89a’Binary data is represented as b prefix. bytes
 b”
Use decode[] to get the string, encode[] to get bytes. Examples.  
file. read[6] == b’GIF89a’
b’hello’. decode[] → ‘hello’
‘hello’. encode[] → b’hello’
str[b’hello’] → “b’hello’Print statement
Example. print ‘ ‘Print function
Example. print[‘ ‘]Integer division
Example. 5/2=2Floor Division. Use 2 slashes
Example. 5//2 = 2 and 5/2=2. 5Float division
Example. 5/2. 0 = 2. 5 or 5. 0/2 = 2. 5Float Division. Use single slash
Example. 5/2 = 2. 5Long type is different from int
long There is no long type. It is same as intxrange[]range[]Iteration functions had iter prefix. iterxxx[]
Example. iteritems[]Dropped iter prefix. xxxx[]
Example. items[]Lists are directly loaded [all elements loaded into memory when list is used]
Example. for i in [] Lists are lazy loaded [when an element is accessed, then only loaded into memory]
Example. for i in list[[]] Dictionaries can be compared by default or against 2 dict.
Example. sorted[dict] Dictionaries can’t be compared directly. sorted[] should have key.

Example. đã sắp xếp[expected_result,key=[lambda x. x[xô. name][‘name’]]]For general dict/list comparison, you can use below.  
 from deepdiff import DeepDiff
 diffs = DeepDiff[actual_result[‘results’], expected_result[ ‘results’ ], ignore_order= True ] if diffs.
   self. khẳng địnhTrue[ Sai , khác]

Bytes and strings as values.
diffs = DeepDiff[set[actual_indexes], set[indexes_names], ignore_order= True , ignore_string_type_changes= True ]

chuỗi. replace[data[i],…]data[i]. thay thế[. ]urllib. urlencode[]New modules
  • http. khách hàng
  • urllib. yêu cầu, urllib. lỗi, urllib. phân tích cú pháp
  • sgmllib3k

Ví dụ.
urllib. phân tích cú pháp. mã url []

string.lowercaseAttributes:
string.ascii_lowercase
string.ascii_uppercase

Xem các cam kết py3 của testrunner  để biết các thay đổi

Cài đặt Python 3

Để thiết lập Python 3 từ đầu, hãy chạy các lệnh bên dưới trên máy chủ mới có các nền tảng chính được hỗ trợ.
Sau này trong thời gian chạy, hãy sử dụng lệnh python 3 hoặc python trong python 3 virtual env. Sử dụng pip3 hoặc pip3. x [pip3. 6 chẳng hạn] để cài đặt các gói dựa trên phiên bản Python 3 đã cài đặt.

hệ điều hành Mac

[Ví dụ. Máy tính xách tay của bạn]

CentOS

[ Nút ví dụ. Nô lệ của Jenkins]

Ubuntu Slave sử dụng để xác minh thời gian chạy Python 3Windows Thiết lập trực tiếp [pip3 được cài đặt tự động].

[https. //wsvincent. com/install-python3-mac/]

con trăn

1

brew cài đặt python3

Thiết lập môi trường ảo

Vỏ bọc

1

2

3

4

5

6

7

8

$ pip3 cài đặt virtualenv

$ mkdir ~/môi trường

$ virtualenv -p python3 ~/environments

$ nguồn ~/môi trường/bin/activate

[môi trường] jmunta-mac:~ jagadeshmunta

$ trăn -V

Trăn 3. 7. 3

[môi trường] jmunta-mac:~ jagadeshmunta

Cài đặt các thư viện cần thiết

Vỏ bọc

1

2

3

4

5

6

7

8

9

$ pip3 cài đặt couchbase

$ pip3 cài đặt sgmllib3k

$ pip3 cài đặt paramiko

$ pip3 cài đặt httplib2

$ pip3 cài đặt pyyaml

$ pip3 cài đặt Geohash

$ pip3 cài đặt python-geohash

$ pip3 cài đặt deepdiff

$ pip3 cài đặt pyes

Hiện tại, sửa đổi bên dưới là bắt buộc đối với ứng dụng khách Python 3 http phổ biến, nếu không, bạn sẽ gặp lỗi

Vỏ bọc

1

2

3

$ vi /usr/lib64/python3.6/http/ứng dụng khách . py.py   

đoạn đến đoạn. mã hóa[] trong tương tự . the below:

1078                     chunk = f'{len[chunk]:X}\r\n'. mã hóa['ascii'] + chunk.encode[] \

 

Thiết lập trực tiếp và môi trường ảo

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

# yum -y cài đặt https. // centos7. cộng đồng ius. org/ius-phát hành. vòng/phút

# danh sách yum có sẵn > /tmp/available_pkgs. txt

# con mèo /tmp/available_pkgs. txt. egrep python3

# yum -y cài đặt python36u

#trăn3. 6 --phiên bản

# yum -y cài đặt python36u-pip

# yum -y cài đặt python36u-devel

#trăn3. 6 -V

# mkdir ~/môi trường

# cd ~/môi trường/

#trăn3. 6 -m venv my_env

# nguồn ~/môi trường/my_env/bin/kích hoạt

#trăn -V

Cài đặt các thư viện cần thiết

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

#píp3. 6 yêu cầu cài đặt

#píp3. 6 cài đặt sgmllib3k

#píp3. 6 cài đặt tham số

#píp3. 6 cài đặt httplib2

#píp3. 6 cài đặt pyyaml

#píp3. 6 cài đặt pytz

#píp3. 6 cài đặt Geohash

#píp3. 6 install python-geohash

#píp3. 6 cài đặt deepdiff

#píp3. 6 cài đặt pyes

 

Thực hiện cài đặt Couchbase CSDK và Python SDK trên nô lệ mới

Vỏ bọc

1

2

3

4

5

# yum -y cài đặt wget git

# quên http. //gói. đế đi văng. com/releases/couchbase-release/couchbase-release-1. 0-6-x86_64. vòng/phút

# rpm -iv couchbase-release-1. 0-6-x86_64. vòng/phút

# yum cài đặt libcouchbase-devel libcouchbase2-bin gcc gcc-C++

#píp3. 6 cài đặt couchbase

Hiện tại, sửa đổi bên dưới là bắt buộc đối với ứng dụng khách Python 3 http phổ biến, nếu không, bạn sẽ gặp lỗi

Vỏ bọc

1

2

3

$ vi /usr/lib64/python3.6/http/ứng dụng khách . py.py   

đoạn đến đoạn. mã hóa[] trong tương tự . the below:

1078                     chunk = f'{len[chunk]:X}\r\n'. mã hóa['ascii'] + chunk.encode[] \

 

Thiết lập trực tiếp

Vỏ bọc

1

# apt cài đặt python3-pip

 

Cài đặt các thư viện cần thiết

Vỏ bọc

1

2

3

4

5

6

7

8

9

# pip3 cài đặt sgmllib3k

# pip3 cài đặt tham số

# pip3 cài đặt httplib2

# pip3 cài đặt pyyaml

# pip3 cài đặt pytz [LƯU Ý. được sử dụng bởi các bài kiểm tra xdcr]

# pip3 cài đặt Geohash

# pip3 cài đặt python-geohash

# pip3 cài đặt deepdiff

# pip3 cài đặt pyes

Cài đặt cài đặt CSDK và Python SDK. [Tham khảo.  https. // tài liệu. đế đi văng. com/c-sdk/2. 10/bắt đầu sử dụng-sdk. html ]

Vỏ bọc

1

2

3

4

5

6

7

8

# quên -O- http. //gói. đế đi văng. com/ubuntu/couchbase. Chìa khóa. sudo apt-key thêm -

# con mèo/etc/apt/nguồn. danh sách. d/couchbase. list

deb [ arch=amd64 ] http://gói. đế đi văng. com/bản phát hành/couchbase-server/enterprise/deb/ bionic bionic/main

deb [ arch=amd64 ] http://gói. đế đi văng. com/bản phát hành/couchbase-server/community/deb/ bionic bionic/main

deb http. //gói. đế đi văng. com/ubuntu bionic bionic/main 

# cập nhật apt-get

#  apt-get install libcouchbase-dev libcouchbase2-bin build-essential

#  pip3 cài đặt couchbase

Hiện tại, sửa đổi bên dưới là bắt buộc đối với ứng dụng khách Python 3 http phổ biến, nếu không, bạn sẽ gặp lỗi

Vỏ bọc

1

2

3

$ vi /usr/lib64/python3.6/http/ứng dụng khách . py.py   

đoạn đến đoạn. mã hóa[] trong tương tự . the below:

1078                     chunk = f'{len[chunk]:X}\r\n'. mã hóa['ascii'] + chunk.encode[] \

 

Tải xuống và cài đặt. https. //www. con trăn. org/ftp/trăn/3. 7. 4/trăn-3. 7. 4. exe

PowerShell

1

2

3

4

C. \Python\Python37- . >python.exe -VPython 3 . 7 . 4

D. \py3porting\testrunner> . set PATH=C:\Python\Python37- . ;C:\Python\Python37-\Scripts;%PATH%

D. \py3porting\testrunner>pip3 -V

pip 19 . 0 . 3 từ c. \python\python37- . \lib\site-packages\pip [python 3. 7 ]

Cài đặt các thư viện cần thiết

PowerShell

1

2

3

4

5

6

7

8

9

pip3 cài đặt libcouchbase

pip3 cài đặt sgmllib3k

pip3 cài đặt paramiko

pip3 cài đặt httplib2

pip3 cài đặt pyyaml

pip3 cài đặt Geohash

pip3 cài đặt python-geohash

pip3 cài đặt deepdiff

pip3 cài đặt pyes

 

quá trình chuyển

Ở cấp độ cao, quá trình chuyển là một quy trình gồm ba bước. 1] Chuyển đổi tự động 2] Thay đổi thủ công 3] Xác thực và sửa lỗi trong thời gian chạy

Lúc đầu, sao chép kho lưu trữ gốc và có các thay đổi chuyển đổi tự động cơ bản. Kiểm tra các thay đổi dưới dạng kho lưu trữ mới cho đến khi hoàn tất chuyển đổi hoàn toàn. Bằng cách này, các chu kỳ hồi quy hiện tại có thể diễn ra liên tục

1. chuyển đổi tự động

Có một công cụ tự động được gọi là công cụ 2to3 tool do nhóm Python 3 cung cấp để trợ giúp .

Bạn có thể bắt đầu với một thư mục duy nhất trong không gian làm việc được nhân bản cục bộ để kiểm tra lại. Sau đó, việc chuyển đổi có thể được thực hiện hoàn toàn trên toàn bộ mã để quá trình chuyển đổi cơ bản được thực hiện

Dưới đây là một số lệnh chuyển đổi 2to3 mẫu trên MacOS. Trong lệnh cuối cùng, lưu ý rằng tất cả các thành ngữ đã được áp dụng. Bằng cách này, lần chuyển đổi đầu tiên có thể xử lý các thay đổi chính

Vỏ bọc

1

2

3

4

5

6

[myenv] jmunta-mac:myscripts jagadeshmunta$ 2to3 . -o mới -n . -w .

hq-mac. testrunner jagadeshmunta$ cd lib . ; mv lib/couchbase_helper .. /couchbase_helper

hq-mac. testrunner jagadeshmunta$ 2to3 - . f all -f buffer -f idioms -f set_literal -f ws_comma  -n -o ~/p3testrunner_3 -w . . tee ~/2to3_3. txt

hq-mac. người chạy thử nghiệm jagadeshmunta$ thời gian 2to3 . -f all -f buffer -f idioms -f set_literal -f ws_comma  -n -w . . tee ~/2to3_4. txt

$ 2 ăn 3 -f tất cả -f buffer -f idioms -f set_literal -f ws_comma  -n -o ~/p3testrunner_helper -w .. /couchbase_helper . tee ~/2to3_helper. txt

cp -R ~/p3testrunner_helper/* .

 

2. Thay đổi thủ công

Chuyển đổi tự động không thực hiện chuyển hoàn chỉnh. Các sự cố phổ biến dưới đây có thể gặp phải trong quá trình chuyển đổi so với các thay đổi cú pháp phổ biến được thực hiện bởi công cụ 2to3 chuyển đổi tự động.  

Chạy lớp kiểm tra và xem có lỗi nào không và sửa một cách thích hợp, quyết định chuyển từ byte sang str hoặc str sang byte hoặc một số vấn đề sắp xếp/so sánh trong đó người ta phải sửa tên khóa trong hàm được sắp xếp. Đây là quy trình lặp đi lặp lại cho đến khi tất cả thời gian chạy mã được xác thực

Khi một mẫu chung chắc chắn rõ ràng, thì bạn có thể thực hiện grep và sed để thay thế trên nhiều tệp lớp. Nếu bạn không chắc chắn về mã khác cho đến khi chạy, thì hãy hoãn lại cho đến khi lớp kiểm tra đó được thực thi.  

Có thể có vấn đề với các thư viện/mô-đun của bên thứ ba có thể đã thay đổi, những vấn đề đó cần được tìm kiếm trên web và sử dụng một cách thích hợp

Đảm bảo tất cả đường dẫn mã được bao phủ bằng cách chạy trên tất cả các nền tảng và thông số được hỗ trợ

3. Xác thực thời gian chạy và sửa lỗi

Khi quá trình chuyển đổi hoàn tất, hãy thực hiện nhiều thời gian chạy mã vì Python là ngôn ngữ động. Mặt khác, các thay đổi có thể phá vỡ mọi thứ nếu bạn chỉ kiểm tra/thay đổi mã tĩnh trực quan. Bạn có thể bắt đầu với các bài kiểm tra độ chính xác cơ bản, bài kiểm tra chấp nhận và sau đó chọn các bài kiểm tra đầy đủ từ một mô-đun kiểm tra duy nhất

Khi bạn cảm thấy thoải mái, hãy lần lượt thực hiện với tất cả các mô-đun khác. Tiếp tục kiểm tra các thay đổi đối với kho lưu trữ mới. Ngoài ra, bạn cần đảm bảo không có hồi quy với các thay đổi được chuyển từ kho lưu trữ mới này bằng cách chạy kiểm tra độ chính xác trên các bản dựng mới hơn. Ngoài ra, quá trình xác thực phải bao gồm tất cả các nền tảng được hỗ trợ với Python 3

 

Python 3 Ported Mã và trạng thái

Dưới đây là nơi tìm kho lưu trữ mới cho mã chuyển Python 3 cho đến khi nó được hợp nhất vào kho lưu trữ chính. Kế hoạch là thực hiện một chu kỳ chuyển hoặc thực hiện trung gian các thay đổi từ repo chính và thực hiện hợp nhất thủ công với điều này

https. //github. com/couchbaselabs/testrunner-py3/

[Chi nhánh. sư phụ]

Nhiều thay đổi phổ biến đã được thực hiện nhưng chưa hoàn thành vì có thể có một số vấn đề về thời gian chạy khác. Các bản sửa lỗi chung cũng có thể được hồi quy về các bản sửa lỗi trước đó do các giả định về chuyển đổi loại giá trị đầu vào. Vẫn còn một số mã được chuyển nữa cần được xác thực bằng Python 3 và nỗ lực vẫn đang được tiến hành

Bây giờ, hãy để tôi chỉ cho bạn các sự cố thường gặp xảy ra trong quá trình xác thực thời gian chạy. Bạn có thể sử dụng điều này làm tài liệu tham khảo khi gặp sự cố để xem bạn có gặp sự cố tương tự không. Bạn có thể áp dụng giải pháp tương tự và xem nó có hiệu quả với bạn không. Và nếu bạn có bất kỳ ý tưởng mới nào, bạn có thể đưa chúng vào phần nhận xét.

Các vấn đề về thời gian chạy chung

 

1. Các vấn đề]

  • Bạn có thể gặp một số TypeErrors bên dưới trong thời gian chạy như str thay vì byte và byte thay vì str
  • Lỗi #1. LoạiLỗi. can’t concat str to bytes
  • Lỗi #2. LoạiLỗi. phải là str, không phải byte
    • con trăn

      1

      2

      3

      4

      5

      6

      7

      Tệp "lib/mc_bin_client. py", dòng 53, in __init__    

      tin nhắn nếu msg. siêu thư += ". " + str[tin nhắn]

      TypeError. phải str, không bytes

       

      Tệp "lib/mc_bin_client. py", dòng 141, in _recvMsg    

      phản hồi += dữ liệu

      TypeError. phải str, không bytes

  • Lỗi #3. LoạiLỗi. một đối tượng giống như byte là bắt buộc, không phải 'str'
    • con trăn

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      Tệp "lib/remote/remote_util. py", dòng 3038, in log_command_output    

      if "Cảnh báo" trong dòng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "hugepages" in line:

      TypeError. a byte-như đối tượng object is required, not 'str'

       

      Tệp "lib/task/task. py", dòng 1167, in run_high_throughput_mode    

      tăng Ngoại lệ[rv["err"]]

      Ngoại lệ. a byte-như đối tượng object is required, not 'str'

       

      Tệp "lib/mc_bin_client. py", dòng 936, in _set_vbucket    

      bản thân. vbucketId = [[[ . zlib.crc32[phím]] . >> 16] & 0x7fff] & [self.vbucket_count - 1]

      TypeError. a byte-như đối tượng object is required, not 'str'

       

       

      Tệp "lib/mc_bin_client. py", dòng 148, in _recvMsg    

      ma thuật = struct. giải nén[">B", response[0:1]][0]

      TypeError. a byte-như đối tượng object is required, not 'str'

       

      Tệp "lib/remote/remote_util. py", dòng 4560, in check_cmd    

      if out and command_output in out[0]:

      TypeError. a byte-như đối tượng object is required, not 'str'

  • Lỗi #4. LoạiLỗi. Không thể trộn các đối số str và không str
    • con trăn

      1

      2

      3

      4

      5

      6

      7

      Tệp "lib/mc_bin_client. py", dòng 126, in _sendMsg    

      bản thân. s. gửi[tin nhắn + tiêu đề phụ + key + val + extended_meta_data]

      TypeError. có thể ' t concat str to bytes

       

      Tệp "/usr/lib64/python3. 6/urllib/phân tích cú pháp. py", dòng 120, in _coerce_args    

      raise TypeError["Không thể trộn đối số str và không phải str"]

      TypeError. Không thể trộn str không-str arguments

Các giải pháp]

Xem các loại biến trong câu lệnh và sử dụng xxx. encode[] để lấy byte hoặc xxx. decode[] để lấy chuỗi hoặc sử dụng tiền tố b hoặc sử dụng str[]. Đôi khi, đầu vào có thể không xác định và trong trường hợp này, hãy sử dụng try x. mã hóa[] ngoại trừ AttributeError. vượt qua


2. Các vấn đề]

TypeError. root – LỖI – ——-> cài đặt không thành công. một đối tượng giống như byte là bắt buộc, không phải là 'str'

Các giải pháp].  

Trong trường hợp này, hãy thêm b làm tiền tố cho chuỗi được so sánh hoặc thay đổi loại byte thành loại chuỗi. Ví dụ. lib/từ xa/remote_util. py

con trăn

1

2

if o[0] != b"".                     

   o = o[0].tách[b" "]

Bao quanh bằng try-ngoại trừ để kiểm tra chính xác dòng gây ra lỗi [nói ở trên TypeError. ]

con trăn

1

2

3

4

5

6

7

8

9

10

11

  nhập truy ngược                   

thử.   

..                   

ngoại trừ Ngoại lệ như e.                      

   log. thông tin["{}". định dạng[e]]                     

   truy ngược. print_exc[]                      

   exc_type, exc_obj, exc_tb = sys.exc_info[]             

   tên = os. đường dẫn. tách[exc_tb. tb_frame. f_code. co_filename][1]                     

   in[exc_type, fname, exc_tb.tb_lineno]

Đầu ra mẫu sau khi truy nguyên. print_exec[] để xem dấu vết ngăn xếp đầy đủ tương tự như java

Khắc phục bằng các thay đổi đối với lib/remote/remote_util. py như dưới đây

con trăn

1

2

3

4

5

6

   

3079         for line in output:    

3080              try:    

3081               line=line.giải mã[]    

3082             except AttributeError:    

3083               pass

3. Các vấn đề]

con trăn

1

2

3

Tệp "lib/membase/api/rest_client. py", dòng 4178, in multiscan_count_for_gsi_index_with_rest    

nội dung = nội dung. tách["[]"][0]

TypeError. a byte-như đối tượng object is required, not 'str'

 

Các giải pháp]

con trăn

1

nội dung = nội dung. tách[b'[]'][0].giải mã[]

 

4. Các vấn đề]

AttributeError suite_setUp[] hoặc suite_tearDown[] bị thiếu đối với một số bộ thử nghiệm

con trăn

1

Lỗi thuộc tính. loại đối tượng 'XDCRAdvFilterTests' no attribute 'suite_setUp'

Các giải pháp]

Thêm các phương thức suite_setUp[] và suite_tearDown[] giả.  

Vỏ bọc

1

2

3

4

5

6

7

8

11a12,18

>

>     def suite_setUp[self]:

>         in["*** XDCRAdvFilterTests. suite_Setup[] ***"]

>

>     def suite_tearDown[self]:

>         print["*** XDCRAdvFilterTests . suite_tearDown[] ***"]

>

 

5. Các vấn đề]

con trăn

1

2

3

Tệp ". /người kiểm tra. py", dòng 416, in main    

kết quả. lỗi = [[tên . , e.thông báo]]

Lỗi thuộc tính. 'AttributeError' đối tượng không có attribute 'message'

 

Các giải pháp]

con trăn

1

kết quả. lỗi = [[tên, str[e]]]

 

6. Các vấn đề]

Lỗi thuộc tính. Đối tượng ‘Transport’ không có thuộc tính ‘_Thread__stop’

con trăn

1

2

3

4

5

6

7

8

9

10

Tệp ". /người kiểm tra. py", dòng 529, in main    

t. _Thread__stop[]

Lỗi thuộc tính. 'Vận chuyển' đối tượng không có attribute '_Thread__stop'

 

Tệp "pytests/view/viewquerytests. py", dòng 45, in stop    

bản thân. _Thread__stop[]

Lỗi thuộc tính. 'StoppableThread' đối tượng không attribute '_Thread__stop'    

 

bản thân. _stop[]

TypeError. 'Sự kiện' đối tượng không phải callable

Các giải pháp]

There is no direct stopping of a non-daemonic thread. Nhưng sử dụng cú pháp khôn ngoan t. _dừng lại[]. Đề xuất là sử dụng tính năng tắt máy duyên dáng bằng cách sử dụng cờ chung và kiểm tra run[] của luồng để ngắt

[https. // stackoverflow. com/questions/27102881/python-threading-self-stop-event-object-is-not-callable]

7. Các vấn đề]

hết hạn kiểm tra. Hạn sử dụng. không tìm thấy test_expired_keys. mô-đun 'chuỗi' không có thuộc tính 'dịch'

Các giải pháp]

Viết lại bằng các phương thức tĩnh str. Không có cách cũ để lấy tất cả các ký tự, vì vậy chúng tôi đã sử dụng mã trước đó và sử dụng tổng số

vi lib/membase/api/tap. py 

con trăn

1

2

3

4

5

6

7

8

def buildGoodSet[goodChars=string.có thể in được, badChar=' . ]:     

143     """Tạo bảng dịch biến tất cả các ký tự không thành GoodChars    

144     đến badChar"""     

145     allChars = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'[]*+,-./0123        456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x9     3\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\x bb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\        xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'    

146     ký tự xấu = str.maketrans[allChars, allChars, goodChars]    

147     badchars1=str.dịch[allChars,badchars]    

148     rv = str.maketrans[badchars1, badChars * len[badchars1]]    

149     return rv

 

8. Các vấn đề]

TabLỗi. inconsistent use of tabs and spaces in indentation

con trăn

1

2

3

4

Tệp "pytests/security/audittest. py", dòng 396     

shell = RemoteMachineShellConnection[self. chính chủ]                                                     

^

Lỗi tab. không nhất quán việc sử dụng của tab spaces in indentation

 

Các giải pháp]

Tìm kiếm ký tự tab và thay thế bằng ký tự khoảng trắng.  

Đối với sự cố trên, hãy xóa các ký tự tab

Vỏ bọc

1

sed -i 's/\t/      /g' pytests/security/audittest.py

 

9. Các vấn đề]

con trăn

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Tệp "lib/couchbase_helper/documentgenerator. py", dòng 83, in __next__    

giá trị = arg[hạt % len[arg]]

TypeError. danh sách chỉ số phải số nguyênor slices, not float

 

Tệp "lib/membase/helper/bucket_helper. py", dòng 517, in load_some_data    

key = ["key_%s_%d" % [testuuid, i] for i in range[number_of_buckets]]

TypeError. 'float' đối tượng không thể interpreted as an integer 

 

File "lib/membase/helper/bucket_helper. py", dòng 372, in verify_data    

kiểm tra. assertEqual[giá trị, khóa, msg='values dont match']

Lỗi khẳng định. b'key_d918f450-5858-4430-a016-230e1f45bcf9_0' . = 'key_d918f450-5858-4430-a016-230e1f45bcf9_0' . giá trị không khớp

 

Tệp "pytests/setgettests. py", dòng 90, in set_get_test    

bản thân. kiểm tra. không thành công["giá trị không khớp với khóa {0}". định dạng[khóa]]

Lỗi khẳng định. value mismatch for key 9fcbd36f-e34d-477b-9fc5-0a5d067dff4b

 

File "pytests/security/auditmain. py", dòng 320, in returnFieldsDef    

if [isinstance[[particulars['mandatory_fields'][items. mã hóa['utf-8']]], dict]]:

KeyError. b'bucket_name'

 

Tệp "lib/task/task. py", dòng 2370, in _check_ddoc_revision    

new_rev_id = chính mình. _parse_revision[meta[']]

Lỗi phím. 'rev'

Các giải pháp]

Case sensitiveness issue. Đã sửa lỗi bằng cách thay đổi từ khóa x_couchbase_meta thành X_Couchbase_Meta

 

10. Các vấn đề]

  • Lỗi #1. LoạiLỗi. '=' not supported between instances of 'int' and 'NoneType'

    Các giải pháp]

    Ở đây, nó sẽ trả về int vì python 3 không tự động so sánh như trong python 2

     

    14. Các vấn đề]

    con trăn

    1

    hasattr[mục, ' iteritems] doesnt return true

    Các giải pháp]

    con trăn

    1

    2

    3

    4

    5

    6

    7

    8

    @@ -754,7 +755,7 @@ class MemcachedClient[object]:          

    # Nếu đây là lệnh, hãy chuyển đổi nó thành trình tạo cặp

    bộ sưu tập = bản thân. collection_name[bộ sưu tập]  > 8] ^ crc32tab[int[[crc ^ ord[ch]] & 0xff]]

    TypeError. ord[] expected string of length 1, but int found

    Các giải pháp]

    Converted the key to string so that ch is string instead of int with binary key. xem tập tin

    con trăn

    1

    2

    3

    4

    thử.  

      phím = phím. giải mã[]

    except

      AttributeError.   pass

     

    16. Problem[s]

    LoạiLỗi. ‘FileNotFoundError’ object is not sub-scriptable

    Các giải pháp]

    Đã thay đổi trong Python 3 vì FileNotFoundError không thể tập lệnh phụ và thay vào đó, hãy sử dụng thuộc tính errno,  e. sai lầm

    con trăn

    1

    2

    3

    4

    5

    File "lib/remote/remote_util. py", dòng 1714, in create_directory    

    if e[0] == 2.

    TypeError. 'FileNotFoundError' object is not subscriptable

    -             if e[0] == 2.

    +             if e. errno == 2.

     

    17. Các vấn đề]

    con trăn

    1

    2

    3

    4

    5

    6

    Traceback [most recent call last].   

    File "lib/couchbase_helper/tuq_helper. py", dòng 521, in run_query_and_verify_result    

    bản thân. _verify_results[sorted_actual_result, sorted_expected_result]  

    File "lib/couchbase_helper/tuq_helper. py", dòng 114, in _verify_results    

    raise Exception[msg]

    Ngoại lệ. The number of rows match but the results mismatch, please check

    Các giải pháp]

    The nested dictionary/list comparison was not working because of the earlier sorted function to sort completely is now not available. Use deepdiff module and DeepDiff class to do the comparison

     

    18. Các vấn đề]

    Lỗi thuộc tính. module ‘string’ has no attribute ‘replace’

    1

    2

    3

    Tệp "scripts/populateIni. py", line 52, in main     

    dữ liệu[i] = string.replace[data[i], 'dynamic', servers[0]]

    AttributeError. module 'string' has no attribute 'replace'

    Các giải pháp]

    Sử dụng biến str trực tiếp để thay thế như hình bên dưới để khắc phục sự cố

    con trăn

    1

    dữ liệu[i]. replace[ 'dynamic', servers[0]]

     

    19. Các vấn đề]

    con trăn

    1

    TypeError. '>' không được hỗ trợ giữa instances of 'int' and 'str'

    Các giải pháp]

    Use str or int function appropriately

    con trăn

    1

    2

       if where_clause.

    +         <   where_clause = where_clause.thay thế['if  t > "', 'if str[t] > "'] # to fix the type error between int, str comparison

     

    20. Các vấn đề]

    TênLỗi. name ‘cmp’ is not defined

    Các giải pháp]

    Sử dụng mô-đun deepdiff và lớp DeepDiff để so sánh đối tượng

     

    21. Problem[s]

    con trăn

    1

    2

    3

       Tệp "lib/couchbase_helper/tuq_helper. py", line 782, in verify_indexes_ redistributed    

    if cmp[items_count_before_rebalance, items_count_after_rebalance] . = 0.

    Lỗi Tên. name 'cmp' is not defined

    Các giải pháp]

    con trăn

    1

    2

    3

    4

    5

    Sử dụng deepdiff mô-đun DeepDiff class to do object comparison.

    -         if cmp[index_state_before_rebalance, index_state_after_rebalance] != 0.

    +         if DeepDiff[index_state_before_rebalance, index_sFile "lib/couchbase_helper/documentgenerator.py", line 19, in has_ next    

    trả về chính mình. itr

Chủ Đề