[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 01/05 16:44 / Filesize : 201 KB / Number-of Response : 720
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれPython(超初心者用) その12



1 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 15:22:07.02 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その11
hibari.2ch.net/test/read.cgi/tech/1301383226/
関連スレ
Pythonのお勉強 Part45
hibari.2ch.net/test/read.cgi/tech/1321189773/
◆関連リンク
Python の Home Page
ttp://www.python.org/

   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

593 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:38:05.56 ]
>>589
インデントがおかしい

def main():
    if len(sys.argv) > 1:
        print ...
    else:
        print ...

if __name__ == '__main__': main()

とかしなきゃだめ

594 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:47:05.07 ]
>>593,592
ありがとうございました。うまくいきました。
インデントエラーが出てないので、てっきり意図通りになっていると
勘違いしてました。
それにしてもここは、本当にまともな掲示板ですね。
私がよく訪れる仕事関係の板は、ソマリアみたいなところなんで、
びっくりしました。
この板とpythonと回答者に幸あれ。

595 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:54:11.13 ]
>>594
うっさい市ね!

596 名前:デフォルトの名無しさん [2012/02/23(木) 16:52:12.56 ]
ここまで全部自演

597 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:57:16.12 ]
むかしはアンチスレが一番まともだったんだが
いまはここなのか

598 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 17:26:49.11 ]
なんか殺伐として来たな。

599 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:27:11.59 ]
対象をよく知ってるアンチほど怖いものはない

600 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:27:42.66 ]
ソマリアの比喩がなんなのか分からん
悪い意味で言ってるんだろうなーくらいは検討つくけど

601 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:06:39.95 ]
>>600
ソマリアつったら海賊問題だろ
海賊仕事関係の板
つまり594は海賊



602 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:47:59.69 ]
糞詰まらんし

603 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:52:14.18 ]
ストッパおすすめ

604 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 16:14:26.19 ]
糞が詰まった

605 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:31:02.95 ]
すみません。
質問させてください。

あるメソッドのテストを行っています。
そのメソッドは引数として整数を一個取り、その整数の範囲は1~100とします。
そのため、テストとして0や101を入れると例外が返ってくることを期待するテストを作ることを考えています。
しかし、そのときふと思ったのですが、引数の型が整数に限定されている場合、引数の型チェックも行うべきなのでしょうか?
今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。

初心者丸出しの質問かもしれませんが、よろしくお願いいたします。



606 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:36:27.55 ]
>>605
isinstanceを使うんだが、テストについてはこのリンクが極めておすすめ
Python3だけど

第9章. ユニットテスト
diveintopython3-ja.rdy.jp/unit-testing.html

607 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:08:47.13 ]
その程度だったら、
assert isinstance(a, int) and 1 <= a <= 100
って一番最初に書いといて、以降はその仕様は忘失の彼方だな・・・

608 名前:デフォルトの名無しさん [2012/02/25(土) 13:17:07.38 ]
>>606
情報ありがとうございます。
リンク先を読ませていただきましたが、一般的なTDDの説明かと思いました。
いまいち、変数に型がないことによるメリットがわかりませんでした。
その辺をわかりやすく解説してあるサイトなどありましたら、教えていただけると助かります。

よろしくお願いいたします。


609 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:27:16.06 ]
30
30
28カ所
約28カ所
約28箇所
不明

のような文字が1行づつに入力されたテキストファイルがあるのですが、
これから数字のみを抜き出したいと考えているのですが、どのようにすればよいでしょうか?
数字だけであれば全角文字をifで半角数値に置換すればいいかと思うのですが、
それ以外の文字を削除する方法が思いつきません。

610 名前:609 mailto:sage [2012/02/25(土) 13:28:55.66 ]
すみません 書き漏れがありました

40箇所か39カ所
のような2つ数字が現れる文字もあるかもしれません。
その場合は最初に出てきた数次だけ抜き出したいです

611 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:04:53.49 ]
正規表現を使って最初に出てきた数字だけをリストに放り込んでいくのはダメなん?



612 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:05:45.24 ]
import re

with open('tech509.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)', l)
if num_str:
print('num_str =', num_str.group())
print()

tech509.txt
aaaaa30お前のカーチャンでーべそw
あいうえお30お前のカーチャンでーべそw
かきくけこ28カ所お前のカーチャンでーべそw
mmmmmm約28カ所お前のカーチャンでーべそw
fed@@@@約28箇所お前のカーチャンでーべそw
mふぃfじゃいえいえいふぉえ不明お前のカーチャンでーべそw
ffieie40箇所か39カ所お前のカーチャンでーべそw

613 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:06:37.24 ]
609でしたーざんねーん
無念、無念の誤読〜

614 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:14:07.22 ]
ちゃんと仕様を確認していませんでした。
はいはい、どうもすいませんっした。

import re

with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.findall(r'((約|か)?([0-90-9]+)(箇所|カ所)?|不明)', l)
if num_str:
print('num_str[2] =', num_str[0][2])
# print('num_str =', num_str)
print()

615 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:20:54.26 ]
はいはい、これで完璧っすかね
何回もやり直してすいませんっした

import re

with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.search(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l)
if num_str.groups()[1]:
print('num_str.groups()[1] =', num_str.groups()[1])
# print('num_str =', num_str)
print()

616 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:31:23.89 ]
なんで最初の一個だけでいいの?
別に言わなくてもいいんだけどさ。
私の感覚的にはnumsが正解なんだけど。

import re

with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?)|不明', l)
# or
if num_str.groups()[1] or 1:
print('num_str.groups()[1] =', num_str.groups())
# print('num_str =', num_str)
num_str = re.findall(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l)
if num_str:
print('num_str =', num_str)
nums = [tup[1] for tup in num_str]
print('nums =', nums)
print()

617 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:38:10.70 ]
ここだけ

nums = [tup[1] for tup in num_str if tup[1]]

↑に修正だわ

618 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 19:36:47.47 ]
「数字だけを抜き出す」のが要望としか読めないんだけど、他の文字をマッチングさせてるのはなぜだろう

619 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 19:41:57.51 ]
〜カ所という形式でなく、

一、関係ない場所で20日、98度などといった形式での数値があると予想できる
二、仕様変更に対する耐性をつけておくため
三、自分でも必要とする時があるかもしれないので自分の感覚通りのものを拵えておいた

620 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:07:07.43 ]
#Python 2.7
import re, codecs

r = re.compile(u'[01234567890123456789]+')
f = codecs.open('test.txt', 'r', 'utf-8')
l = f.readlines()
f.close()
n = [re.search(r, s).group(0) if re.search(r, s) else '' for s in l]

for s in n:
print s

621 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:22:35.78 ]
そういえば、スタックとヒープを可視化しながらPythonコードを1行ずつ実行してくれる、初心者向け素敵Web実行環境は既出ですか?
ttp://people.csail.mit.edu/pgbovine/python/tutor.html#mode=edit



622 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:42:50.00 ]
pdb使ったらいいんちゃうん?
あと、>>621のいうスタックは、localsのことだろうと思う。

623 名前:デフォルトの名無しさん [2012/02/25(土) 21:36:24.88 ]
pythonでクラス作っていますが、インスタンス変数、クラス変数へのアクセス制御(private,publicなど)はどうすればいいのですか?


624 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 22:16:26.99 ]
property
_underscore_name

625 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 23:02:08.02 ]
>>624
ありがとうございます。
命名規則で対処できたんですね


626 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 01:12:10.81 ]
そういうお約束にしましょうよって話。
まあ、これくらいは読んでおいてね。

Python のコーディングガイド PEP8 - 日本語訳
www.oldriver.org/python/pep-0008j.html

メソッド名とインスタンス変数

関数の場合と同じルールを使う。lowercase 方式で命名し、可読性を上げ
るためにアンダースコアで単語を区切る。

非公開なメソッドとインスタンス変数にのみ、先頭にアンダースコアを1
つ使って命名する。

   ....省略されました。続きを読むにはワッフルワッフルと入力して下さい。

継承のための設計

クラスのメソッドやインスタンス変数(つまり「属性」)を公開すること
の是非を、常に考慮する。どちらがいいか分からないときには、非公開に
する。公開属性を非公開にするよりも、非公開属性を公開にするほうが容
易である。

公開属性にするということは、あなたのクラスを他人が使うことを想定し、
将来の非互換性を避けることを約束したということだ。非公開属性にする
ということは、他人が使うことを想定しておらず、変更したり削除したり
するかも知れないということだ。

   ....省略されました。続きを読むにはワッフルワッフルと入力して下さい。

あと、最低でもこれ一通り読め。
diveintopython3-ja.rdy.jp/index.html

627 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 01:57:11.94 ]
>>622
グローバルなのも表示されとるよ。

デバッガ使えば似たようなことできるのは知ってるが、
初心者でも手軽に使えそうだし、特にmutable, immutable関連での頻出の質問に対する
かなり明確な答えになると思われるし、初心者向きスレには需要あるかと思って貼ってみた。

628 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 03:21:30.42 ]
>>623
アクセス制御なんてない

629 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 09:58:23.94 ]
>>626
了解。
まずは、勉強させてもらいます。

>>628
pythonにカプセル化とかの概念はないのですか?

630 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 10:02:01.50 ]
概念はあるでしょ。

言語仕様で縛るか、お約束でやるかの違い。

631 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:10:45.72 ]
透明どころか手を中に突っ込めるカプセル



632 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:55:27.36 ]
こういうシンプルな書き方ってできないのですか?
for x in a_list if a_condition(x):
 do_something(x)

こう書けるのはわかりますが、filter とか lambda とか面倒で気に入らない
for x in filter(lambda x: a_condition(x), a_list):
 do_something(x)

こう書けるのもわかりますが、無駄に冗長でウンコ臭い
for x in [x for x in a_list if a_condition(x)]:
 do_something(x)

633 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:03:43.20 ]
for x in a_list:
    if a_condition(x): do_something(x)

634 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:06:25.76 ]
def is_odd(n):
return n % 2

a_list = [i for i in range(10)]

for x in filter(is_odd, a_list):
print(x, 'is odd.')

635 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:14:31.83 ]
>>633-634
やっぱりそういう書き方しかないですか?

>>633
それ do_something(x) が複数の文になるとインデント2段になりますよね

>>634
a_condition(x) をいちいち関数定義するのは面倒ですね

636 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:30:07.95 ]
>>632の一番上は分かりにくくないかい?
continue使えば?ってなりそうな気がした。

def is_odd(n):
return n % 2

a_list = [i for i in range(10)]

for x in a_list:
if not is_odd(x):
continue
print(x, 'is odd.')

637 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:35:54.48 ]
>>636
うーん。もし書けるなら、これの方が
for x in a_list if is_odd(x):
 print(x, 'is odd.')

これより簡潔で分かりやすいと思うんだけど
for x in a_list:
 if not is_odd(x):
  continue
 print(x, 'is odd.')

638 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:12:04.71 ]
そうかもなあって思っちゃってる。
continueがない分いいってか。
うーん、、、

for x in a_list if is_odd(x):
for x in filter(is_odd, a_list):

上2つは等価なfor文だけど、
修正が大変とかで上の文法は採用されなかったんだろか。
上の方を満たすためにfilter()用意したんじゃないかな?
って思ってる。
ここは我慢してPythonに合わせるしかないんじゃないの?

話を元に戻して、

> こういうシンプルな書き方ってできないのですか?
> for x in a_list if a_condition(x):
>  do_something(x)

↓って言われちゃう。できないっぽいねぇ

for x in a_list if is_odd(x):
^
SyntaxError: invalid syntax

639 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:21:18.40 ]
>>638
>修正が大変とかで上の文法は採用されなかったんだろか。

SyntaxError: invalid syntax ってなることからわかるように、
文法を変えないといけないからでしょ。

特定の場合に便利だからといって、どんどん文法を増やすと
それ以外の場合に却って使いにくくなったりするからねぇ。

640 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:51:17.81 ]
書ける
for x in a_list:
 if is_odd(x):
  print x

書ける
for x in a_list:
 if is_odd(x): print x

書けない
for x in a_list: if is_odd(x): print x


641 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:15:20.82 ]
もうpythonじゃなくていいんじゃないの?
自分の好きな書き方が出来る言語を探せばいい
無ければ作ろう



642 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:55:55.38 ]
    お断りします
        お断りします
            お断りします
      ハ,,ハ ハ,,ハ ハ,,ハ ハ,,ハ
     ( ゚ω゚ )゚ω゚ )゚ω゚ )゚ω゚ )  お断りします
    /    \  \  \  \    お断りします
  ((⊂  )   ノ\つノ\つノ\つノ\つ))   お断りします
     (_⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ       お断りします
      ヽ ヘ } ヘ }  ヘ } ヘ }
  ε≡Ξ ノノ `Jノ `J ノ `J ノ `J

643 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 18:46:27.49 ]
なくなるなら宝石が先

644 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 19:03:06.98 ]
>>643
いや
641は632に対してね

645 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:15:44.71 ]
いろいろ考えたけど
内包表記やラムダなどを駆使して関数的に美しく書くなんてのは
Python では目指さない方が良さそうだというところに落ち着いた
やって出来ない事はないけど、やっぱり関数型言語ではないので
関数的なスタイルで読みやすいコードを書くのは難しい。

凝ったことはせずに
素直に手続き的に書いて関数も一つ一つ def する
というのが Python のコツっぽいかな?

646 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:39:15.16 ]
>>626
リンクのdive into python3はまとまっていてわかりやすそうかと思いました
python3を対象としていますが、今からpython勉強する場合は3がいいでしょうか?
なんか、ネット徘徊していると、2を勉強すべしとの意見も多いので困っています
よろしくお願いいたします



647 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:57:21.03 ]
どっちかで迷うくらいなら、3系がいいと思うよ。
私は3系のみ勉強している。
2系を折角勉強したのに、3系では邪魔知識になるとか嫌でしょ。
既存のPythonの資産を使いたいとかなら、
2系の勉強も考えた方がいいかも知れないけど、
そうじゃないなら3系からの勉強でいいと思う。

>>646が、Pythonをなぜ使いたいのかが一番大きい。

648 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 06:28:08.91 ]
Python3の現時点のデメリットは対応ライブラリが少ないくらいで至急何か作る必要がなければ困らないと思うよ
Python2は文字コードべったりなんでunicodeの暗黙の変換とかかなり分かりにくい

649 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:06:32.98 ]
勉強するだけなら Python 3 でも構わないかもね。
現実に使うのは厳しいが。


650 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:12:40.46 ]
どうしても、本人がどうしたいかになるんだよね。

651 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 11:53:03.88 ]
u"3だと日本語書くためにいちいちuつけなくていいから楽"




652 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 12:08:34.16 ]
全角だし

653 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 19:57:44.25 ]
つ[from __future__ import unicode_literals]

654 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 22:12:03.40 ]
>>649
目的が勉強だけって…
それはプログラミングやる意味ないんじゃ…

655 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:00:49.73 ]
勉強の意味が
数学や英語の学業としての勉強じゃなくて、
学んでいるという意味の勉強じゃないのかな?

656 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:04:47.16 ]
プログラム言語なんてその言語特有のお約束を覚えればいいだけじゃん
制御構文や変数はどの言語だって共通してるし

つまり

657 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:06:42.91 ]
>>647
単純に、Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです
今現在のLinuxで動いているpythonとすると2系が多いですかね
個人的には3が勉強したいですけど


658 名前:デフォルトの名無しさん [2012/02/27(月) 23:24:21.45 ]
Python製のフレームワークって今何がHOTなの?

659 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:28:07.90 ]
>>657
両方勉強するのはだめなの?

660 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:41:16.90 ]
ライブラリの多さがpythonの利点なんだし
Python3なんて選択肢に入らない

661 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:47:18.01 ]
最初はどっちかに絞った方がいいと思ます。
二兎追うものは一兎も得ず
っていうじゃないですか。
どちらも理解できれば一番いいけど、そう上手くいくかな?

> Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです

今度は、どんな目的で調べているかによる。なんつって。
範囲が広いんだよねー。

中身を読んでるってことですよね。
ふむ。
改良や開発目的で調べてるの?
そのソフトウェアの開発者達が、
後継の開発を2で行うって言ってるんなら、2の勉強だろうし、
3で行うってのが多勢なら3だろうし。



662 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:07:28.87 ]
smtplibについて質問させてください。

会社のメールサーバーに対して

> telnet XXX.XXX.XXX.XXX 25
を実行するとうまくつながるのですが、

以下のように実行するとエラーが発生します。
原因が何かヒントをいただけないでしょうか。
import smtplib
s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)


c:\test\python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "c:\python27\lib\smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\python27\lib\smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "c:\python27\lib\socket.py", line 571, in create_connection
raise err
socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま
せんでした。
>>>

663 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:09:29.04 ]
>>661
中身は読んでいますけど、ほとんど趣味ですね
会社から要求されているのは単純な使い方と性能のみ
でも、個人的に興味持って色々と調べています

ま、趣味なんで、3勉強してみます


664 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:28:07.37 ]
こちらからもちょっと質問させて下さい。

> telnet
>>> import smtplib

って同一PCかつ同一OSでの実行結果?
それぞれの環境でpingがとおることは確認済?

まあ、これが答えのような気もするけど。
socket.error: [Errno 10061] 対象のコンピュータによって拒
否されたため、接続できませんでした。

665 名前:デフォルトの名無しさん [2012/02/28(火) 01:20:53.58 ]
scipyとmatplotlibが移植されたんで、自分的には3でも結構逝ける。

666 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 01:46:09.75 ]
俺はいつも逝ってる
むしろ吊ってるし詰んでる

667 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 05:58:14.65 ]
>605
>今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。

>608
>いまいち、変数に型がないことによるメリットがわかりませんでした。

型はある
型宣言が無いだけ

668 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:05:53.88 ]
>632
for x in filter(a_condition, a_list):
 do_something(x)

669 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:14:14.91 ]
ワッフル ワッフル

670 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:31:08.22 ]
>>662
telnetでサーバからのリプライは確認した?
220 <ホスト名> ESMTP Sendmail ... とか返ってくるはずだけど

671 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:43:35.75 ]
>>670
はい、返ってきました。
これがうまくいっているので、どうしてエラーが起こるのかわからないんです…



672 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:13:17.56 ]
>>671
となるとちょっとわからない。ごめん
wiresharkでも使ってtelnetとsmtplibの通信内容を比べてみては

673 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:17:43.69 ]
wiresharkじゃなくてdebug設定では

674 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:30:31.34 ]
-v
-vvv

675 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:37:01.98 ]
>>667
メリット教えてやれよ


676 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 09:38:41.68 ]
>>675
ダックタイピングができる

677 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:14:31.80 ]
>>667
値に型があるんであって、変数に型はないでしょ

678 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:31:13.65 ]
変数はオブジェクト型またはプリミティブ型もしくはNoneです

679 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 17:53:02.28 ]
Pythonにはプリミティブ型なんて無い。
Noneもただのオブジェクト。

680 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 18:15:00.11 ]
pythonにはオブジェクトしかない

お前もオブジェクトにしてやろうか

681 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:05:46.33 ]
ひぃいぃ



682 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:27:45.80 ]
ジェクジェクにしてやろう

683 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:29:29.76 ]
壊れてすっかり職場のオブジェ

684 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:04:10.42 ]
>>671
[Errno 10061] は、WSAECONNREFUSED のことだろうから、
接続先のサーバーで smtp サーバーが動作していない (正確には、
該当のポートをリッスンしている奴がいない) ことを示している。

本当に、telnet と同じサーバーに繋ぎにいこうとしてる?

もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?

685 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:16:28.49 ]
>>684

> もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?

これはどうしてダメなんですか?
025のゼロがダメなんでしょうか。すいません。

686 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:57:53.76 ]
>>685
8進数だから

687 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:25:20.84 ]
>>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
Traceback (most recent call last):
...

から見るにそんなことはしていなそうでしたが。

同一PCかつ同一OSでの実行結果?
それぞれの環境でpingがとおることは確認済?

とりあえず、pingは通りましたが送信できずに困ってますとかって言って欲しい。

688 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 03:55:30.51 ]
良心的に見て
>>> s = smtplib.SMTP('192.168.080.025', 25)
とかがアウトっていう意味か

ping が通ったからと言って telnet (IP) 25 が通る保障はどこにもない

689 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 03:58:36.06 ]
そしてpingが通らなくてもSMTP接続出来ることなんていくらでもある

690 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 05:48:42.36 ]
そして>662を読めといいたい

691 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 07:00:15.35 ]
こういう話だったらいいなあ
ja.wikipedia.org/wiki/Outbound_Port_25_Blocking

以下smtplib.SMTPでもdebuglevelが使えるようなので
今回の件には役に立ちそうにないけど一応

import smtplib
smtplib.SMTP.debuglevel = 1
con = smtplib.SMTP(hostname, 25)
... debug情報がずらずら ...



692 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:21:38.30 ]
クライアントの PC は同じ環境からアクセスしてんのかな
あと telnet するときの IP と smtplib.SMTP するときの IP
( XXX.XXX.XXX.XXX の部分 ) は本当に同じなのかな


693 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:21:00.17 ]
pythonでインスタンスのアドレスを知る方法ってないんでしょうか?
ずっと勘違いしてて id でアドレス表示してるのかと思ったら
全然そんなことないですよね
id の仕様を見ても「識別子」としか明言してなくてアドレスだとは一言も言ってないし

694 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:38:44.02 ]
help(id)

695 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 23:35:05.47 ]
あってるよ

Python/bltinmodule.c [926/2392行][38%]
static PyObject *
builtin_id(PyObject *self, PyObject *v)
{
return PyLong_FromVoidPtr(v);
}

PyDoc_STRVAR(id_doc,
"id(object) -> integer\n\
\n\
Return the identity of an object. This is guaranteed to be unique among\n\
simultaneously existing objects. (Hint: it's the object's memory address.)");

696 名前:デフォルトの名無しさん [2012/03/01(木) 15:22:17.92 ]
あってるね

697 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:48:39.27 ]
(1) (2) (3) を同じPC(Windows XP)で実行しました。
スクリプトからの接続を拒否する仕組みってあるのでしょうか?

-----------------------------------------------
(1) pingを実行した場合、以下のように成功します。

c:\test>ping 100.100.100.100

Pinging 100.100.100.100 with 32 bytes of data:

Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63

Ping statistics for 100.100.100.100:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms











698 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:49:08.93 ]
-----------------------------------------------
(2) telnet を実行した場合、以下のように成功します。

c:\test>telnet 100.100.100.100 25

220 xxx.xxx.co.jp ESMTP Postfix




699 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:50:13.53 ]
-----------------------------------------------
(3) pythonを以下のように実行するとエラーが出ます。

c:\test>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> smtplib.SMTP.debuglevel=1
>>> con = smtplib.SMTP('100.100.100.100', 25)
connect: ('100.100.100.100', 25)
connect: (25, '100.100.100.100')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "c:\python27\lib\smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\python27\lib\smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "c:\python27\lib\socket.py", line 571, in create_connection
raise err
socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま
せんでした。
>>>


700 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:52:26.58 ]
単にファイアウォールにひっかかってるだけじゃないの?

701 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:54:28.83 ]
>>698
この先に進もうとしようとすると同じように失敗しない?
telnetでどうやってメール送れたの?
受信確認はどうやったの?



702 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:42:02.63 ]
>>700
例えばノートンなんかに
(telnet.exeの通信は止められていないけど)
python.exeの通信が止められてる可能性があるってことか

703 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:22:05.12 ]
ファイアウォールというかセキュリティソフトのチェックかもな
telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけだろ


704 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:39:38.90 ]
かもとだろって、両立するの?

705 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:54:24.88 ]
自然言語では両立するでしょ。

706 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:24:24.48 ]
嘉本さんのこと言うなー

707 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:31:16.20 ]
(馬)鹿本だろう

708 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:36:14.76 ]
ぶるるるぁ

709 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:51:13.63 ]
webページをダウンロードして内容をファイルに書くところで詰まってるんだけど、

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
open('D:\P/output.txt', 'w').write(mainline)
TypeError: expected a character buffer object

と出るんだけどどうしたらいいの書き込もうとする文字列が一定以上の量だとエラー出る感じだけど

710 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 21:21:04.13 ]
type(mainline)
確認してみたら?
文字数が変わると内部でmainlineのtype変えてるんじゃないの?

711 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 21:40:50.14 ]
import StringIO
open('D:\P/output.txt', 'w').write(StringIO.StringIO(mainline).getvalue())



712 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 23:37:00.57 ]
>>699
>connect: ('100.100.100.100', 25)
>connect: (25, '100.100.100.100')

なんで二行でるんだ?

とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。

>>700
多分、それはない。
もし、そうなら、10060 (WSAETIMEOUT) になるはず。

713 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:34:59.65 ]
>>701

今日試しました。
telnetでメールが送信できました。
以下のサイトを参考にました。
www.nurs.or.jp/~telnet/smtp.html

受信はメールソフトを使いました。

なんでだめなのか、さっぱりわかりません。

714 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:38:30.40 ]
>>712

何度かためしましたが、確かに二行が表示されます。

> とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。

やりましたが、結果は全く同じです。
ひとつわかったことがあります。

IPアドレスを100.100.100.100じゃなくて、でたらめな値に変えても全く同じエラーが発生します。
telnetを使って100.100.100.100 でメール送信できたので、ipアドレスが間違っていることはありません。
smtplib のソースにデバッグコードを埋め込んでどこまでうまく動いているか、切り分けするしかないんでしょうか。



715 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:44:54.17 ]
ファイアウォールというかセキュリティソフトのチェック
telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけ

716 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:54:29.66 ]
多分PCから出れてないわ
みんながいうようにファイア・ウォールが原因だと思うぞなもし
一度ファイア・ウォール、セキュリティ関係諸々を停止させてから試してみなよ
そしたら上手くいくと思う

717 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:57:53.99 ]
localhost, 127.0.0.1だったらうまくいくんだっけか?

718 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:58:29.82 ]
職業別の人気順位
      (an・an調べ)
xbrand.yahoo.co.jp/category/lifestyle/7380/1.html
1位 システムエンジニア
2位 公務員
3位 銀行&商社マン
4位 警察・消防・自衛官
5位 マスコミ・営業マン・広告マン
6位 企業経営者
7位 医師
8位 弁護士、公認会計士

719 名前:デフォルトの名無しさん [2012/03/03(土) 00:59:02.50 ]
馬鹿には無理






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef