gpt4 book ai didi

python - 递归错误: I'm looking for a way to reduce the number of the loop

转载 作者:行者123 更新时间:2023-12-01 07:06:18 26 4
gpt4 key购买 nike

我正在寻找代码的优化以避免以下错误并使我的程序更快。调用 Python 对象时超出最大递归深度

我希望在 Docker 容器中执行此代码。它在我的机器本地完美运行。

我正在寻找一种减少循环次数的方法。

def reidentify(self):
try:
# Check if file is re-identify
self.check_if_dicom_is_reidentify()

LOGGER.info(f"Anonymization in progress for {self.dirpath_output}")

# Get patient data
json_data = json.loads(self.get_patient_data().decode('utf-8'))

# Re-identification
archive = zipfile.ZipFile(self.download.dirpath_download, 'r')

for file in archive.namelist():

# Check if the file is a dicom
if not file.endswith('.dcm'):
continue

# Reading dicom file
dicom_data = io.BytesIO(archive.read(file))
ds = pydicom.dcmread(dicom_data)

# Edit Dicom general fields
for key in json_data['tags']:
ds.data_element(key).value = json_data['tags'][key]

# Edit Dicom series field
for key in json_data['series']:
if key['obfuscated_uid'] != ds.data_element('SeriesInstanceUID').value:
continue

for tag in key['tags']:
ds.data_element(tag).value = key['tags'][tag]

# Save re-identify dicom
ds.save_as(f'{self.dirpath_tmp}/{os.path.basename(file)}')

except Exception as e:
LOGGER.error(e)

这段代码给出了预期的结果,但我认为这不是一个优化的方法,而且非常慢。

编辑:这是堆栈跟踪

reidentify_1  | 2019-10-17 11:29:53,001] With tag (0010, 1030) got exception: maximum recursion depth exceeded while calling a Python object
reidentify_1 | Traceback (most recent call last):
reidentify_1 | File "/usr/local/lib/python3.8/site-packages/pydicom/tag.py", line 30, in tag_in_exception
reidentify_1 | yield
reidentify_1 | File "/usr/local/lib/python3.8/site-packages/pydicom/filewriter.py", line 541, in write_dataset
reidentify_1 | write_data_element(fp, dataset.get_item(tag), dataset_encoding)
reidentify_1 | File "/usr/local/lib/python3.8/site-packages/pydicom/filewriter.py", line 485, in write_data_element
reidentify_1 | writer_function(buffer, data_element)
reidentify_1 | File "/usr/local/lib/python3.8/site-packages/pydicom/filewriter.py", line 338, in write_number_string
reidentify_1 | val = str(val)
reidentify_1 | File "/usr/local/lib/python3.8/site-packages/pydicom/valuerep.py", line 344, in __str__
reidentify_1 | return super(DSfloat, self).__str__()
reidentify_1 | File "/usr/local/lib/python3.8/site-packages/pydicom/valuerep.py", line 347, in __repr__
reidentify_1 | return "\"" + str(self) + "\""

非常感谢您的帮助。

最佳答案

好像是fixed但没有pypi package使用该修复程序构建。

该bug的根源描述如下:

Python 3.8 removes str() from int and float which instead now call object.str() which itself defaults to object.repr().

DSfloat.str(), DSfloat.repr() and IS.repr() all call the parent class' str() which calls the subclass' repr() method and so on, which causes a recursion error.

This PR:

Fixes DSfloat.__str__() by creating a calling repr() instead and removing the " marks.
Fixes DSfloat.__repr__() by calling the parent class' __repr__() instead of str()
Fixes IS.__repr__() by implementing IS.__str__() in a similar manner to DSfloat.__str__() and making IS.__repr__() symmetric with

DSfloat.repr()

<小时/>

您可以尝试直接从 git 存储库安装它:

pip uninstall pydicom
pip install git+https://github.com/pydicom/pydicom.git

关于python - 递归错误: I'm looking for a way to reduce the number of the loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58432935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com