@marinsentyo_25

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

特定のツイートをDiscordの自鯖チャンネルへ通知させたい

解決したいこと

とあるユーザーのツイート内容をDiscordBOTを伝いDiscord鯖のチャンネルに通知させたい。
そのためのプログラムコードを知りたいです。

発生している問題・エラー

AttributeError: partially initialized module 'tweepy' has no attribute 'OAuthHandler' (most likely due to a circular import)

問題・エラーが起きている画像
tweepy.py - Visual Studio Code 2022_02_18 18_44_44.png

該当するソースコード

画像を参照ください。一部画像を加工させていただきました。

自分で試したこと

Qiitaサイトをいくつか拝見(URL貼っておきます。)し、youtubeを見たり、Pythonの本を買って読んだりしてやってみました。
1、Twitterのタイムライン取得
https://qiita.com/hawk777/items/1986f79de455a0e8e4dd
2、TweepyでTwitterのタイムラインを取得する
https://qiita.com/pontyo4/items/a7284330cd79ad48589f
3、(外部サイト)TwitterのタイムラインをDiscordに表示させる。
https://zenn.dev/tact/articles/476ec594f3b58d

 終わりに

私はいろんな場所でこのような質問をしたところ「お前はプログラミングに向いていない」と言われてしまい、悲しみに明け暮れていました。ですが、私の中でどうしても諦めきれないので質問させていただきました。ご教授の程よろしくお願い致します。
そして、必要な情報等がございましたら教えて下さい。

1 likes

1Answer

確かにこのエラーの意味が理解できなかったり,エラー文で検索をかけて解決に辿り着かないのであれば,「プログラミングに向いていない」という発言をされてしまうのも無理ないかと思われます.

エラー文は基本的に英語で表示されますので,最初に「翻訳機に突っ込む」ということから始めてはどうでしょうか.また,翻訳でも意味がわからなかった場合に,検索をかけるという手段も用いましょう.

翻訳する(DeepL)

エラー文

AttributeError: partially initialized module 'tweepy' has no attribute 'OAuthHandler' (most likely due to a circular import)

を,DeepLで翻訳してみました.

結果は,

AttributeError: 部分的に初期化されたモジュール 'tweepy' には属性 'OAuthHandler' がありません (循環的なインポートが原因の可能性が高いです)

となります.どうやら「循環的なインポートが原因の可能性が高い」みたいですね.

確かに,marinsentyoさんが作ったコードのファイル名はtweepy.pyというファイル名で記述されている上で,コードの序盤にimport tweepyとなっています.このファイル名とソースコードでは,循環的なインポートを行うことになります.

tweepy.pyがライブラリtweepyを呼び出している.すなわち自分自身をimportしているため循環的なインポートというわけです.(そしてmarisentyoさんが作ったtweepy.pyにはOAuthHandlerは定義されていません.が,インストールした方のライブラリtweepyには定義されています.)

これを回避するために,使いたいライブラリの名前と,それが記述されているコードの名前は別の名前にしなければなりません.たった一文字追加して,tweepy_.pyとするだけで回避される問題です.

お試しでライブラリを使ったり,いろんなライブラリの統括を行うプログラムであれば,playground.pymain.pyと書かれるのも一手ですね.とにかく,「ライブラリtweepyを使うプログラムを書くからファイル名はtweepy.pyにしよ.」はダメということです.

検索する

エラー文全文をGoogle検索をかけてみた結果になります.

スクリーンショット 2022-02-18 19.45.23.png

私の検索結果において一番上のものは的外れでしたが,2,3,4番目に表示されたページは正しい解決策を講じていました.以下,2,3,4番目に表示されたページになります.

エラー文そのままでGoogle検索上位4つに3つも解決策が示されています.そしてその手法は上で示したものと同じ,ファイル名を変更するという方法です.

終わりに

以上より,marinsentyoさんが使っているインターネットの世界に答えが存在するにもかかわらず,それを見つけることのできない検索力を指摘され,「プログラミングに向いていない」という発言をされてしまったのではないかと考えられます.

Qiitaの質問フィードではそのような物言いで回答をされる方は見かけませんが,やはり検索力がものをいう世界になっているように感じます.

質問を行う際のテンプレートに,「自分で試したこと」の欄がありますが,今後,その欄には「エラー文を翻訳してみた(けど意味がわからなかった)」,「エラー文で検索してみた(けど答えが出てこなかった)」ような旨を記述するようにした方がよさそうです.

実際には,翻訳したりエラー文で検索をかけた時点で答えが見つかることの方が多いです.

具体的に,どういった方が「プログラミングに向いていない」と言われるかの指標の1つとして次の記事を読んでおくと良いでしょう.

お力添えになれば幸いです.いったん今出ているエラーを回避してから,次のDiscordへの通知を行うためのプログラムが書けるようになると思います.

0Like

Comments

  1. @marinsentyo_25

    Questioner

    わかりました。ありがとうございます。

Your answer might help someone💌