У меня возникает ошибка при импорте модулей с помощью PyCharm, которая не возникает при использовании Jupyter Notebook

Для проекта мне нужно импортировать файл DICOM из переменного источника данных. Я работаю над проектом в PyCharm, так как в конечном итоге я буду повторять код, и конечным продуктом будет программа. Ошибка, которую я получаю, следующая:


10.10.2017 08:58:16.307 Python[1010:26876] -[NSApplication _setup:]: нераспознанный селектор отправлен экземпляру 0x105154320

2017-10-10 08:58:16.311 Python[1010:26876] *** Завершение работы приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «-[NSApplication _setup:]: нераспознанный селектор отправлен экземпляру 0x105154320»

*** Стек вызовов первого броска:

(

0   CoreFoundation                      0x00007fff9e92757b __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x00007fffb3b801da objc_exception_throw + 48
2   CoreFoundation                      0x00007fff9e9a7f14 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3   CoreFoundation                      0x00007fff9e89ac93 ___forwarding___ + 1059
4   CoreFoundation                      0x00007fff9e89a7e8 _CF_forwarding_prep_0 + 120
5   Tk                                  0x000000010438cc02 TkpInit + 471
6   Tk                                  0x00000001043082a9 Tk_Init + 1794
7   _tkinter.cpython-36m-darwin.so      0x00000001041e0dfd Tcl_AppInit + 77
8   _tkinter.cpython-36m-darwin.so      0x00000001041de849 _tkinter_create + 889
9   Python                              0x000000010006a7b8 _PyCFunction_FastCallDict + 552
10  Python                              0x00000001000f4164 call_function + 612
11  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
12  Python                              0x00000001000f3500 _PyEval_EvalCodeWithName + 2720
13  Python                              0x00000001000f43c7 _PyFunction_FastCallDict + 439
14  Python                              0x000000010000ea54 _PyObject_FastCallDict + 356
15  Python                              0x000000010000f120 _PyObject_Call_Prepend + 208
16  Python                              0x000000010000e443 PyObject_Call + 99
17  Python                              0x0000000100089af1 slot_tp_init + 81
18  Python                              0x00000001000802b4 type_call + 212
19  Python                              0x000000010000e9a4 _PyObject_FastCallDict + 180
20  Python                              0x00000001000f3fa5 call_function + 165
21  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
22  Python                              0x00000001000f3eae fast_function + 606
23  Python                              0x00000001000f414b call_function + 587
24  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
25  Python                              0x00000001000f3500 _PyEval_EvalCodeWithName + 2720
26  Python                              0x00000001000f3d2b fast_function + 219
27  Python                              0x00000001000f414b call_function + 587
28  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
29  Python                              0x00000001000f3500 _PyEval_EvalCodeWithName + 2720
30  Python                              0x00000001000f43c7 _PyFunction_FastCallDict + 439
31  Python                              0x000000010000ea54 _PyObject_FastCallDict + 356
32  Python                              0x000000010000f120 _PyObject_Call_Prepend + 208
33  Python                              0x000000010000e443 PyObject_Call + 99
34  Python                              0x0000000100089af1 slot_tp_init + 81
35  Python                              0x00000001000802b4 type_call + 212
36  Python                              0x000000010000e9a4 _PyObject_FastCallDict + 180
37  Python                              0x00000001000f3fa5 call_function + 165
38  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
39  Python                              0x00000001000f3500 _PyEval_EvalCodeWithName + 2720
40  Python                              0x00000001000f3d2b fast_function + 219
41  Python                              0x00000001000f414b call_function + 587
42  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
43  Python                              0x00000001000f3500 _PyEval_EvalCodeWithName + 2720
44  Python                              0x00000001000f3d2b fast_function + 219
45  Python                              0x00000001000f414b call_function + 587
46  Python                              0x00000001000f5b74 _PyEval_EvalFrameDefault + 5604
47  Python                              0x00000001000f3500 _PyEval_EvalCodeWithName + 2720
48  Python                              0x00000001000f36a4 PyEval_EvalCode + 100
49  Python                              0x000000010013000e PyRun_FileExFlags + 206
50  Python                              0x00000001001302af PyRun_SimpleFileExFlags + 447
51  Python                              0x0000000100149b3a Py_Main + 3914
52  Python                              0x0000000100000dfe Python + 3582
53  Python                              0x0000000100000c34 Python + 3124
54  ???                                 0x0000000000000002 0x0 + 2

) libc++abi.dylib: завершение с необработанным исключением типа NSException

Процесс завершен с кодом выхода 134 (прерван сигналом 6: SIGABRT)


Код, который дает мне ошибку, следующий:

import pydicom
from tkinter import filedialog
from matplotlib import pylab

"""Get fileName"""
#from tkinter import filedialog
filename = filedialog.askopenfilename()

"""Import DICOM File"""
#import pydicom
df = pydicom.read_file(filename)
dim = df.pixel_array

"""Show DICOM Image"""
#from matplotlib import pylab
pylab.imshow(dim, cmap="gray")
pylab.show()

Этот точный код не вызывает ту же ошибку при запуске в виде файла блокнота jupyter или когда импорт расположен в строках с комментариями.

Я понятия не имею, почему это так, и я надеюсь, что вы знаете, почему я получаю эту ошибку. Я бы хотел, чтобы импорт модуля был в верхней части скрипта, потому что, ну, аккуратность и прочее.

Заранее спасибо!


person Leon van den Hoven    schedule 10.10.2017    source источник


Ответы (1)


Я думаю, что это проблема с бэкэндом matplotlib TkAgg. Попробуйте следующее для библиотеки matplotlib

import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt
person anasvaf    schedule 10.10.2017
comment
Спасибо за это. Это на самом деле отлично работает! И спасибо за быстрый ответ. спасатель! Просто из любопытства, иначе как бы я узнал об этом? В чем проблема с серверной частью TkAgg? - person Leon van den Hoven; 10.10.2017
comment
Без проблем! Рад, что помог. Это зависит от того, как использовать matplotlib. Вы хотите, чтобы появилось новое всплывающее окно, или вы хотите, чтобы график был интегрирован в графический интерфейс. Вы должны выбрать определенный бэкэнд для каждого случая. Также в зависимости от вашей ОС поддерживаются некоторые типы. matplotlib.org/faq/usage_faq.html#what-is-a- бэкэнд Вы можете прочитать больше о бэкэнде на этом сайте - person anasvaf; 10.10.2017
comment
Я на самом деле использую это и все еще получаю сообщение об ошибке. - person Blade; 27.11.2019