Saya menggunakan VSCode dengan ekstensi python. Tab 'masalah' serta indikator pada tab 'penjelajah' dan garis bawah merah dalam tampilan kode itu sendiri semuanya menunjukkan ada kesalahan, meskipun kesalahannya tidak nyata.

Setelah mengimpor matplotlib.pyplot sebagai plt, kode menggunakan plt.cm.RdBu. VSCode menampilkan kesalahan bahwa matplotlib.cm tidak memiliki anggota RdBu.

Ada dua masalah di sini:

  • Kecuali saya hanya salah, plt.cm.RdBu seharusnya sama dengan matplotlib.pyplot.cm.RdBu, bukan matplotlib.cm.RdBu. Sepertinya salah mengartikannya.
  • Namun terlepas dari itu, baik cm dan pyplot.cm sebenarnya memiliki atribut yang disebut RdBu, keduanya dapat saya ambil informasinya untuk menggunakan help(). Kode berjalan dengan sempurna dan python tidak menimbulkan kesalahan.

Mengapa VSCode memberi tahu saya bahwa ini adalah kesalahan padahal sebenarnya tidak? Apakah ini hanya bug atau mungkin salah konfigurasi?

2
Ecko 1 Juli 2020, 00:08

1 menjawab

Jawaban Terbaik

Sayangnya, sepertinya tidak ada cara untuk memperbaiki masalah ini. Alasan mengapa Kode VS, atau lebih khusus lagi, linter yang digunakan oleh ekstensi Python tidak mengambil matplotlib.pyplot.cm.RdBu, atau peta warna lain yang ditentukan dalam cm adalah karena mereka didefinisikan secara dinamis< /em>. Jika Anda mencoba melihat ke dalam cm.py, Anda hanya akan menemukan ini:

cmap_d = _gen_cmap_d()
locals().update(cmap_d)

Pada dasarnya, alih-alih didefinisikan secara statis seperti RdBu = ..., peta warna ini didefinisikan secara dinamis dengan dimasukkan ke dalam namespace global modul saat runtime. Meskipun ini berfungsi dengan baik saat Anda menjalankannya, sayangnya itu berarti linter tidak mungkin mengetahui bahwa nama seperti RdBu ada di namespace hingga runtime. Dan karena kebanyakan linter seperti pylint dan flake8 adalah alat analisis kode statis yang tidak pernah benar-benar mengeksekusi kode, mustahil bagi mereka untuk mendeteksi keberadaan peta warna ini.

2
Tyler Tian 1 Juli 2020, 01:23